Kilua เป็นตัวแก้ไขข้อความขนาดเล็กที่ขยายได้และ Lua

โครงการเดิมมีพื้นฐานมาจากโปรแกรมแก้ไขกิโลกรัมขั้นต่ำที่เขียนโดย @Antirez และแนะนำที่นี่ในบล็อกของเขา แต่ตอนนี้ไม่มีรหัสกับโครงการนั้นเป็นเพียงบรรพบุรุษ
Kilua เขียนโดย Steve Kemp และมีการอัปเดตและเพิ่มเติมมากมายเมื่อเทียบกับโครงการดั้งเดิม:
Mx function()lua-lpeg การเปิด kilua ทำงานตามที่คุณคาดหวัง:
$ kilua [options] [file1] [file2] ... [fileN]
เมื่อเปิดตัวคีย์ลูกศรจะย้ายคุณไปรอบ ๆ และคีย์ bindings หลักที่จะเรียนรู้คือ:
Ctrl-x Ctrl-o Open an existing file.
Ctrl-x Ctrl-f Open an existing file.
Ctrl-x Ctrl-s Save the current file.
Ctrl-x Ctrl-c Quit.
Ctrl-x c Create a new buffer
Ctrl-x n Move to the next buffer.
Ctrl-x p Move to the previous buffer.
Ctrl-x b Select buffer from a list
M-x Evaluate lua at the prompt.
Ctrl-s Regular expression search.
ตัวเลือกบรรทัดคำสั่งต่อไปนี้ได้รับการยอมรับและเข้าใจ:
--config file--dump-config--eval--syntax-path--versionการติดตั้งควรตรงไปตรงมาเพื่อสร้างรหัสรัน:
make
เมื่อสร้างขึ้นคุณสามารถเรียกใช้ไบนารีในแบบพกพาได้เช่น:
./kilua --syntax-path ./syntax [options] [file1] [file2] .. [fileN]
การใช้งาน --syntax-path จำเป็นต้องโหลดไฟล์ไวยากรณ์ แต่คุณสามารถลบตัวเลือกได้หากคุณคัดลอกเนื้อหาของไดเรกทอรี ./syntax/ ไปยัง:
/etc/kilua/syntax/~/.kilua/syntax/หากคุณไม่ได้ระบุตำแหน่งของไลบรารีที่มีความสูงไวยากรณ์หรือคุณไม่ได้ติดตั้งคุณจะมีการรองรับแบบไวยากรณ์สูงเป็นศูนย์
นี่เป็นผลมาจากการวางรหัสการส่องสว่างแบบไวยากรณ์ในไลบรารีภายนอก: หากคุณไม่สามารถโหลดไลบรารีเหล่านั้นได้ฟังก์ชั่นการทำงานจะไม่สามารถใช้ได้
เราสร้างด้วย LUA 5.2 โดยค่าเริ่มต้น แต่ถ้าคุณแก้ไข src/Makefile คุณควรจะสามารถสร้าง LUA 5.1 ได้สำเร็จ
ในการเริ่มต้นการกำหนดค่าไฟล์ต่อไปนี้จะถูกอ่านหากมีอยู่:
~/.kilua/init.lua./.kilua/$hostname.lua*Messages* เพื่อดูว่าพบว่ามี หากไม่มีการอ่านไฟล์จะมีการสร้างสำเนาของ kilua.lua ซึ่งสร้างขึ้นในเวลาที่สร้างจะถูกดำเนินการซึ่งจะทำให้มั่นใจได้ว่ามีการทำงานขั้นต่ำ (เช่นถ้าคุณโหลดไฟล์กำหนดค่าเป็นศูนย์จะไม่มีการตั้งค่า keybindings ใด ๆ ดังนั้นคุณจึงไม่สามารถนำทางหรือแก้ไขได้!)
สันนิษฐานว่าคุณจะแก้ไขไฟล์เริ่มต้นที่ให้มาเพื่อเปลี่ยนการผูกเพื่อให้เหมาะกับความต้องการของคุณเพิ่มฟังก์ชันการทำงานผ่าน LUA Primitives ที่ให้มาแล้วจากนั้นคัดลอกไปยัง ~/.kilua/init.lua (อาจขยายด้วยไฟล์ต่อโฮสต์ด้วย)
หากไม่มีการเปลี่ยนแปลงใด ๆ คุณจะได้รับตัวแก้ไขการทำงานซึ่งเป็นไปตามการตั้งค่าเฉพาะของฉัน
การตอบกลับ การใช้งานฟังก์ชั่นที่มีประโยชน์จะได้รับการขอบคุณแม้ว่าจะเพิ่มการเพิ่มความสูงของไวยากรณ์สำหรับภาษาเพิ่มเติม
ในอนาคตอาจมีการโทรกลับมากขึ้นซึ่งเป็นฟังก์ชั่นการโทร C-core ที่จุดต่าง ๆ
ตอนนี้มีการโทรกลับต่อไปนี้และถูกเรียกใช้ผ่าน C-core:
get_status_bar()on_complete(str)on_idle()on_key(key)on_loaded(filename)on_save(filename)on_saved(filename) kilua อนุญาตให้เปิดไฟล์หลายไฟล์ผ่านการใช้บัฟเฟอร์ หาก kilua เปิดตัวโดยไม่มีพารามิเตอร์ชื่อไฟล์ใด ๆ จะมีบัฟเฟอร์สองตัว:
*Messages*Ctrl-x Ctrl-s หรือ Mx save("name") เพื่อบันทึก มิฉะนั้นจะมีบัฟเฟอร์หนึ่งตัวสำหรับแต่ละไฟล์ที่มีชื่อตามบรรทัดคำสั่งรวมถึงบัฟเฟอร์ *Messages* (คุณสามารถฆ่าบัฟเฟอร์ *Messages* ถ้าคุณต้องการ แต่มันเป็นสิ่งที่มีประโยชน์ที่จะมีอยู่รอบ ๆ )
คีย์ที่มีการผูกมัดคีย์เริ่มต้นสำหรับการทำงานกับบัฟเฟอร์คือ:
| การกระทำ | ผูกพัน |
|---|---|
| สร้างบัฟเฟอร์ใหม่ | Ctrl-x c |
| ฆ่าบัฟเฟอร์ปัจจุบัน | Ctrl-x k |
| ฆ่าบัฟเฟอร์ปัจจุบันโดยใช้กำลัง | Ctrl-x K |
| เลือกบัฟเฟอร์ถัดไป | Ctrl-x n หรือ M-right |
| เลือกบัฟเฟอร์ก่อนหน้า | Ctrl-x p หรือ M-left |
| เลือกบัฟเฟอร์ผ่านเมนู | Ctrl-x b หรือ Ctrl-x B |
เป็นเรื่องน่าสังเกตว่าคุณสามารถสร้างบัฟเฟอร์แบบไดนามิกได้อย่างง่ายดายผ่าน Lua ตัวอย่างเช่นฟังก์ชั่นต่อไปนี้สามารถเรียกได้โดย Mx uptime() และทำสิ่งที่คุณคาดหวัง:
*uptime*/usr/bin/uptime ลงในบัฟเฟอร์ตัวอย่าง uptime:
-- Run `uptime`, and show the result in a dedicated buffer.
function uptime()
local result = buffer( "*uptime*" )
if ( result == -1 ) then create_buffer("*uptime*") end
-- move to end of file.
eof()
insert(cmd_output("uptime"))
end
คุณสามารถบันทึกตำแหน่งของคุณ (เช่น "mark") ในคีย์ที่มีชื่อและต่อมาข้ามไปที่มันเหมือนใน vi
ในการบันทึกตำแหน่งปัจจุบันใช้ Mm และกดปุ่มที่คุณต้องการใช้ หากต้องการกลับไปใช้ Mb XX โดยที่ XX เป็นกุญแจสำคัญที่คุณเลือก (เครื่องหมายบันทึกบัฟเฟอร์เช่นเดียวกับตำแหน่งเคอร์เซอร์ปัจจุบัน)
บาร์สถานะซึ่งแสดงเป็นบรรทัดสุดท้ายในจอแสดงผลมีชื่อของไฟล์/บัฟเฟอร์ปัจจุบันรวมถึงตำแหน่งเคอร์เซอร์ ฯลฯ
เนื้อหาของฐานสถานะถูกสร้างขึ้นผ่าน LUA ดังนั้นจึงเป็นเรื่องง่ายที่จะแก้ไข จอแสดงผลเริ่มต้นแสดง:
"${buffer}/${buffers} - ${file} ${mode} ${modified} #BLANK# Col:${x} Row:${y} [${point}] ${time}"
ค่าภายใน " ${...} " มีการขยายผ่านการแทนที่และต่อไปนี้มีให้โดยค่าเริ่มต้น:
| ชื่อ | ความหมาย |
|---|---|
${buffers} | จำนวนบัฟเฟอร์แบบเปิด |
${buffer} | จำนวนบัฟเฟอร์ปัจจุบัน |
${date} | วันที่ปัจจุบัน |
${file} | ชื่อของไฟล์/บัฟเฟอร์ |
${mode} | ถ้ามี |
${modified} | สตริงที่รายงานว่าบัฟเฟอร์ได้รับการแก้ไขหรือไม่ |
${point} | ตัวละครภายใต้จุด |
${time} | เวลาปัจจุบัน |
${words} | จำนวนคำในบัฟเฟอร์ |
${x} | พิกัด X ของเคอร์เซอร์ |
${y} | พิกัด Y ของเคอร์เซอร์ |
คำตอบแบบดึง ที่เพิ่มตัวเลือกเพิ่มเติมที่นี่จะเป็นที่ต้อนรับมากที่สุด
การไฮไลต์ไวยากรณ์ได้รับการจัดการผ่านห้องสมุด lua-lpeg และหากไม่ได้ติดตั้งมันจะไม่สามารถใช้งานได้
บัฟเฟอร์แต่ละตัวมีโหมดการส่องสว่างไวยากรณ์ที่เกี่ยวข้องซึ่งเป็นสตริงเช่น "C", "Markdown" หรือ "Lua" ไฟล์การกำหนดค่าเริ่มต้นตั้งค่าโหมดตามคำต่อท้ายของไฟล์ที่คุณแก้ไข
หากคุณต้องการเปลี่ยนโหมดแบบโต้ตอบเป็น Lua ตัวอย่างเช่นเรียกใช้:
M-x syntax("lua")
การใช้การไฮไลต์ไวยากรณ์ต้องใช้การโหลดของไลบรารี ตัวอย่างเช่นไวยากรณ์ที่เน้นของ Lua ต้องการให้โหลดห้องสมุด lua.lua - โหมดไวยากรณ์จะถูกค้นหาในสถานที่เหล่านี้:
/etc/kilua/syntax~/.kilua/syntax--syntax-pathการใช้งานค่อนข้างง่าย:
update_colours จะอนุญาตให้สีของอักขระแต่ละตัวในบัฟเฟอร์ถูกตั้งค่า เพื่อหลีกเลี่ยงความล่าช้าเมื่อแทรกข้อความการเรนเดอร์จะได้รับการอัปเดตในพื้นหลังผ่านการโทรกลับ on_idle() ฟังก์ชั่นนี้ทำสิ่งที่ชัดเจน:
text()update_colours() เป็นตัวอย่างที่เป็นรูปธรรมหากบัฟเฟอร์มีสตริง "Steve Kemp" ดังนั้นการโทรไปยัง update_colours ควรมี:
`RED RED RED RED RED WHITE GREEN GREEN GREEN GREEN`
นั่นจะส่งผลให้ "สตีฟ" ถูกแสดงเป็นสีแดงและ "เคมพ์" เป็นสีเขียว
ขณะนี้เรารวมการส่องสว่างไวยากรณ์สำหรับ:
Makefile s.การตอบกลับแบบดึง เพิ่มโหมดไวยากรณ์เพิ่มเติมจะเป็นที่ต้อนรับมากที่สุด
https://news.ycombinator.com/item?id=12137698
ไม่มีแผนในอนาคตที่ชัดเจน แต่อาจมีรายงานข้อผิดพลาดหากคุณมีคุณสมบัติที่จะแนะนำ (หรือข้อผิดพลาดในการรายงาน)!
สิ่งหนึ่งที่อาจมีประโยชน์คือการแยกส่วนเพื่อดูสองไฟล์เคียงข้างกันหรือหนึ่งด้านบนอื่น ๆ นี่ยังไม่ได้วางแผน แต่ฉันคิดว่ามันสามารถทำได้อย่างหมดจดอย่างสมเหตุสมผล
Steve - https://steve.kemp.fi/