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.
\vi?abbr\s+(\k+)
? Bisakah Anda memberi saya tautan dengan kutipan singkatan Anda, untuk melihat apakah saya dapat mereproduksi masalah Anda?n
bendera ke panggilan pengganti (saya sudah mengedit jawaban untuk memasukkannya). Jika Anda melakukan pencarian divimrc
dan menyalin-paste ini\v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+
, apakah ini menyoroti singkatan Anda?Tip wikia menyarankan metode untuk menampilkan singkatan Anda secara selektif:
Anda dapat membuat daftar semua singkatan Anda dengan
(ganti
ab
olehiab
ke daftar hanya menyisipkan singkatan mode)Dan Anda dapat membuat daftar semua singkatan dengan awalan yang sama dengannya
Ini tidak semudah penyelesaian pada singkatan tapi itu bisa menjadi cara yang baik untuk secara cepat memiliki daftar singkatan yang ada.
Untuk membuat solusi ini lebih efisien, praktik yang baik adalah membuat singkatan khusus untuk tipe file. Misalnya, singkatan ini hanya berguna dalam buffer java:
Jadi, baik untuk mendefinisikannya seperti ini:
Bagian perintah otomatis memungkinkan untuk membuat singkatan hanya ketika Anda berada di buffer java dan
<buffer>
opsi membuat singkatan hanya dapat diakses dari buffer ini.Cara ini hanya
:iab
akan menampilkan singkatan ketika Anda berada di buffer java. Jika Anda memiliki banyak singkatan, mungkin menarik untuk membuat fungsi berdasarkan tipe file yang akan mendefinisikan semua singkatan dan membiarkan perintah otomatis memanggil fungsi. Sesuatu seperti:Solusi lain dapat membuat fungsi pelengkapan otomatis Anda sendiri menggunakan daftar singkatan Anda sebagai sumber kata kunci.
Akhirnya saya harus mengatakan bahwa saya cukup terkesan dengan "lebih dari 500 singkatan", saya tidak tahu yang mana yang Anda gunakan tetapi mungkin akan menarik bagi Anda untuk melihat pada konsep snippet jika Anda tidak terbiasa dengan mereka. Karena ini adalah templat yang dipicu dengan memasukkan kata kunci dan menekan tombol pintas, mereka lebih fleksibel daripada singkatan, mungkin memungkinkan Anda untuk mengurangi jumlah singkatan yang Anda gunakan. Lihat di sini untuk pengantar yang menarik.
sumber
Bagaimana dengan mengelompokkan singkatan berdasarkan jenis file?
Alih-alih memiliki semuanya dalam
~/.vimrc
file Anda , pisahkan dan letakkan di lokasi yang tepat di direktori runtime Anda, yang ada~/.vim
di sistem operasi mirip Unix.Misalnya, singkatan Markdown Anda akan terletak di file
~/.vim/after/ftplugin/markdown.vim
, yang Vim cek setelah plugin filetype Markdown dimuat.Ternyata kita seharusnya tidak memiliki
.vimrc
file besar ; Anda mendapatkan lebih banyak fleksibilitas menggunakan$VIMRUNTIME
. Jalan runtime didokumentasikan dalam sistem bantuan Vim ini::h 'runtimepath'
.Saya pertama kali belajar tentang ini dari artikel yang bagus Dari .vimrc ke .vim pada Vimways kalender bertema Vim .
sumber