500'den fazla kısaltmayı yönetmenin en iyi yolunun ne olduğunu bilmiyorum. Belki uzun vadede, @statox'un açıkladığı gibi, bu sayıyı azaltmak için parçacıklara bakabilirsiniz.
Kısaltmaları otomatik olarak tamamlamak istiyorsanız, aşağıdaki kodu deneyebilirsiniz:
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
Kullanmak için C-x C-u
bir kısaltmanın başlangıcından sonra vurmanız gerekir .
Autocmd s:abbrev_list
, tüm kısaltmalarınızı içermesi gereken değişkeni ayarlar .
İşlev CompleteAbbrev()
, imleçten önceki sözcüğe göre adayların listesini döndürmelidir.
'completefunc'
Seçeneğin değeri vurduğunda işlevin çağrılacağı Vim söyler C-x C-u
.
Seçeneğin arabellek için yerel olduğuna dikkat edin, bu nedenle yine de bir autocmd ve FileType
olay kullanarak farklı türde arabelleklerde diğer işlevleri kullanabilirsiniz .
:h complete-functions
İşlevin nasıl çalıştığı hakkında daha fazla bilgi için bkz .
Başka bir çözüm eş anlamlı tamamlama kullanmak olacaktır. Gönderen :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.
Bu çözümü kullanmak için 3 şey yapmanız gerekir:
- Yaz
{lhs}
özel bir dosya içindeki tüm kısaltmaların.
Örneğin /home/user/mysynonyms.txt
,. Ve benzer temalar etrafında gruplandırın.
Bu dosyanın yolunu seçeneğe ekleyin 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
C-x C-t
Bir grup içindeki herhangi bir kısaltmanın adının başlangıcından sonra vurulur .
Örneğin, aşağıdaki kısaltmalara sahip olduğunuzu varsayalım:
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
Bunları ait oldukları programlama diline göre gruplandırabilirsiniz.
İçeride /home/user/mysynonyms.txt
şunları yazardınız:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Şimdi, C-x C-t
bir kısaltmanın adından (veya sadece başlangıcından) sonra her vurduğunuzda , Vim açılır menüde aynı satırdaki tüm kısaltmaları görüntülemelidir.
İşte böyle görünecekti:
Kısaltmaların gruplanmak için aynı karakterlerle başlaması gerekmediğini, tamamen farklı olabileceğini unutmayın. Eş anlamlılar dosyanızda aynı satırda oldukları sürece, Vim hepsini gösterecektir.
Ve hangi grubun bir kısaltma koyduğuna karar vermek için programlama dilini kullanmak zorunda değilsiniz. Bunları aklınızdaki herhangi bir anlamlı benzerlik / konu / kategoriye göre gruplandırabilirsiniz.
Belirli bir kısaltmayı unuttuğunuzda, bir kategorinin ilk harflerini yazabilir C-x C-t
, menüye girip ilgili olanı seçebilirsiniz.
Düzenleme:
Tüm kısaltmalarınızı içine dökmek /home/user/mysynonyms.txt
için şu 3 Ex komutlarını kullanabilirsiniz:
: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')
Edit2:
Ben bayrak ekledik n
zaman substitute()
herhangi ikame gerekmez çünkü fonksiyon denir. Tek amacı, bulunduğunda listeye bir kısaltma eklemektir.
Ancak birçok kısaltmanız olduğu için, bu işlemi gereksiz yere yavaşlatabilir, bilmiyorum. Başlangıçta koymadım çünkü hangi Vim sürümünü kullandığınızı bilmiyorum. Sürümünüz 7.3.627'den daha yeni ise , tamam olmalıdır, aksi takdirde n
bayrağı kaldırmanız gerekir .