ฉันไม่รู้ว่าวิธีใดดีที่สุดในการจัดการตัวย่อมากกว่า 500 ตัว อาจเป็นในระยะยาวตามที่ @statox อธิบายคุณอาจดูตัวอย่างเพื่อลดจำนวนนี้
และหากคุณต้องการตัวย่อให้สมบูรณ์โดยอัตโนมัติคุณสามารถลองใช้รหัสต่อไปนี้:
augroup GetAbbrev
autocmd!
autocmd VimEnter * let s:abbrev_list = [] |
\ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END
set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
if a:findstart
return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
else
return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
endif
endfunction
หากต้องการใช้งานคุณจะต้องกดC-x C-u
หลังจากเริ่มต้นตัวย่อ
autocmd ตั้งค่าตัวแปรs:abbrev_list
ซึ่งควรมีตัวย่อทั้งหมดของคุณ
ฟังก์ชั่นCompleteAbbrev()
ควรกลับรายการของผู้สมัครตามคำก่อนเคอร์เซอร์
ค่าตัวเลือกที่บอกเป็นกลุ่มที่ฟังก์ชั่นที่จะเรียกเมื่อคุณกด'completefunc'
โปรดทราบว่าตัวเลือกนั้นเป็นของท้องถิ่นสำหรับบัฟเฟอร์ดังนั้นคุณยังคงสามารถใช้ฟังก์ชั่นอื่น ๆ ในรูปแบบของบัฟเฟอร์ที่แตกต่างกันโดยใช้ autocmd และเหตุการณ์ตัวอย่างC-x C-u
FileType
ดู:h complete-functions
ข้อมูลเพิ่มเติมเกี่ยวกับการทำงานของฟังก์ชัน
อีกวิธีคือการใช้คำพ้องความหมายให้สมบูรณ์ จาก:h i_^x^t
:
*i_CTRL-X_CTRL-T*
CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
the 'thesaurus' option instead of 'dictionary'. If a
match is found in the thesaurus file, all the
remaining words on the same line are included as
matches, even though they don't complete the word.
Thus a word can be completely replaced.
For an example, imagine the 'thesaurus' file has a
line like this:
angry furious mad enraged
Placing the cursor after the letters "ang" and typing
CTRL-X CTRL-T would complete the word "angry";
subsequent presses would change the word to "furious",
"mad" etc.
Other uses include translation between two languages,
or grouping API functions by keyword.
ในการใช้โซลูชันนี้คุณต้องทำ 3 สิ่ง:
- เขียน
{lhs}
ตัวย่อทั้งหมดของคุณลงในไฟล์เฉพาะ
ตัวอย่างเช่น/home/user/mysynonyms.txt
. และจัดกลุ่มตามธีมที่คล้ายกัน
เพิ่มพา ธ ไปยังไฟล์นี้ไปยังตัวเลือก'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
ตีC-x C-t
หลังจากเริ่มต้นชื่อตัวย่อใด ๆ ภายในกลุ่ม
ตัวอย่างเช่นสมมติว่าคุณมีตัวย่อดังต่อไปนี้:
iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC
iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC
iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC
คุณสามารถจัดกลุ่มตามภาษาการเขียนโปรแกรมที่เป็นของพวกเขา
ข้างใน/home/user/mysynonyms.txt
คุณจะเขียน:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
ตอนนี้เมื่อใดก็ตามที่คุณกดC-x C-t
ชื่อตัวย่อ (หรือเพียงแค่เริ่มต้น), กลุ่มที่จะแสดงในเมนูป๊อปอัพตัวย่อทั้งหมดที่อยู่ในบรรทัดเดียวกัน
นี่คือลักษณะ:
โปรดทราบว่าตัวย่อไม่จำเป็นต้องเริ่มต้นด้วยตัวอักษรเดียวกันเพื่อจัดกลุ่มซึ่งอาจแตกต่างกันโดยสิ้นเชิง ตราบใดที่พวกเขาอยู่ในบรรทัดเดียวกันในไฟล์คำพ้องความหมายของคุณ Vim จะแสดงพวกเขาทั้งหมด
และคุณไม่จำเป็นต้องใช้ภาษาการเขียนโปรแกรมเพื่อตัดสินใจว่ากลุ่มใดจะใช้ตัวย่อ คุณสามารถจัดกลุ่มตามความคล้ายคลึง / หัวข้อ / หมวดหมู่ที่มีความหมายที่คุณมีอยู่ในใจ
ดังนั้นเมื่อคุณลืมตัวย่อที่เฉพาะเจาะจงคุณสามารถพิมพ์ตัวอักษรตัวแรกของหมวดหมู่กดC-x C-t
และเลือกตัวอักษรที่เกี่ยวข้องภายในเมนู
แก้ไข:
การถ่ายโอนคำย่อทั้งหมดของคุณภายใน/home/user/mysynonyms.txt
คุณสามารถใช้คำสั่ง 3 Ex เหล่านี้:
:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')
แก้ไข 2:
ฉันได้เพิ่มการตั้งค่าสถานะn
เมื่อsubstitute()
มีเรียกฟังก์ชันเนื่องจากคุณไม่ต้องการทดแทน มีวัตถุประสงค์เพียงอย่างเดียวคือการเพิ่มตัวย่อภายในรายการเมื่อพบ
แต่เนื่องจากคุณมีตัวย่อหลายอย่างมันอาจทำให้กระบวนการช้าลงอย่างไร้ประโยชน์ฉันไม่รู้ เริ่มแรกฉันไม่ได้ใส่เพราะฉันไม่รู้เวอร์ชั่น Vim ที่คุณใช้ หากรุ่นของคุณใหม่กว่า7.3.627ควรเป็นอย่างนั้นมิฉะนั้นคุณจะต้องลบการn
ตั้งค่าสถานะ