Saya tidak tahu apa cara terbaik untuk mengelola lebih dari 500 singkatan. Mungkin dalam jangka panjang, seperti yang dijelaskan @statox, Anda dapat melihat potongan untuk mengurangi angka ini.
Dan jika Anda ingin melengkapi singkatan secara otomatis, Anda dapat mencoba kode berikut:
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
Untuk menggunakannya, Anda harus menekan C-x C-u
setelah awal singkatan.
Autocmd mengatur variabel s:abbrev_list
yang harus berisi semua singkatan Anda.
Fungsi CompleteAbbrev()
harus mengembalikan daftar kandidat berdasarkan kata sebelum kursor.
Nilai 'completefunc'
opsi memberi tahu Vim fungsi yang akan dipanggil saat Anda menekan C-x C-u
.
Perhatikan bahwa opsi ini bersifat lokal untuk buffer, jadi Anda masih bisa menggunakan fungsi lain di berbagai jenis buffer, menggunakan autocmd dan FileType
acara misalnya.
Lihat :h complete-functions
untuk info lebih lanjut tentang cara fungsi bekerja.
Solusi lain adalah dengan menggunakan penyelesaian sinonim. Dari :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.
Untuk menggunakan solusi ini, Anda harus melakukan 3 hal:
- Tuliskan
{lhs}
semua singkatan Anda di dalam file khusus.
Sebagai contoh /home/user/mysynonyms.txt
,. Dan kelompokkan mereka di sekitar tema yang serupa.
Tambahkan path ke file ini ke opsi 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Tekan C-x C-t
setelah awal nama singkatan di dalam grup.
Misalnya, anggap Anda memiliki singkatan berikut:
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
Anda dapat mengelompokkannya sesuai dengan bahasa pemrograman mereka.
Di dalam /home/user/mysynonyms.txt
, Anda akan menulis:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Sekarang, setiap kali Anda menekan C-x C-t
nama singkatan (atau hanya awal), Vim akan menampilkan, dalam menu popup, semua singkatan yang berada di baris yang sama.
Begini tampilannya:
Perhatikan bahwa singkatan tidak perlu dimulai dengan karakter yang sama untuk dikelompokkan, mereka bisa sangat berbeda. Selama mereka berada di baris yang sama dalam file sinonim Anda, Vim akan menunjukkan semuanya.
Dan Anda tidak harus menggunakan bahasa pemrograman untuk memutuskan di mana grup meletakkan singkatan. Anda dapat mengelompokkannya berdasarkan kesamaan / topik / kategori yang Anda pikirkan.
Jadi, ketika Anda lupa singkatan tertentu, Anda bisa mengetikkan huruf pertama dari suatu kategori, tekan C-x C-t
dan pilih yang relevan di dalam menu.
Sunting:
Untuk membuang semua singkatan Anda di dalam /home/user/mysynonyms.txt
, Anda bisa menggunakan 3 perintah Ex ini:
: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')
Sunting2:
Saya telah menambahkan bendera n
ketika substitute()
fungsi dipanggil karena Anda tidak memerlukan substitusi apa pun. Satu-satunya tujuan adalah untuk menambahkan singkatan di dalam daftar setiap kali ditemukan.
Tetapi karena Anda memiliki banyak singkatan, itu bisa membuat prosesnya lambat, saya tidak tahu. Awalnya, saya tidak mengatakannya karena saya tidak tahu versi Vim yang Anda gunakan. Jika versi Anda lebih baru dari 7.3.627 , seharusnya tidak apa-apa, jika tidak, Anda harus menghapus n
bendera.