Nie wiem, jak najlepiej zarządzać ponad 500 skrótami. Być może w dłuższej perspektywie, jak wyjaśnił @statox, możesz rzucić okiem na fragmenty, aby zmniejszyć tę liczbę.
A jeśli chcesz automatycznie uzupełniać skróty, możesz wypróbować następujący kod:
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
Aby go użyć, musisz trafić C-x C-u
po początku skrótu.
Autocmd ustawia zmienną, s:abbrev_list
która powinna zawierać wszystkie twoje skróty.
Funkcja CompleteAbbrev()
powinna zwrócić listę kandydatów na podstawie słowa przed kursorem.
Wartość 'completefunc'
opcji mówi Vimowi, do której funkcji należy zadzwonić po naciśnięciu C-x C-u
.
Zauważ, że opcja jest lokalna dla bufora, więc nadal możesz używać innych funkcji w różnego rodzaju buforach, FileType
na przykład używając autocmd i zdarzenia.
Zobacz :h complete-functions
więcej informacji na temat działania tej funkcji.
Innym rozwiązaniem byłoby użycie uzupełniania synonimów. Od :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.
Aby skorzystać z tego rozwiązania, musisz zrobić 3 rzeczy:
- Napisz
{lhs}
wszystkie swoje skróty w dedykowanym pliku.
Na przykład /home/user/mysynonyms.txt
. I zgrupuj je wokół podobnych tematów.
Dodaj ścieżkę do tego pliku do opcji 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Hit C-x C-t
po początku nazwy dowolnego skrótu w grupie.
Załóżmy na przykład, że masz następujące skróty:
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
Możesz pogrupować je według języka programowania, do którego należą.
W środku /home/user/mysynonyms.txt
napiszesz:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Teraz, za każdym razem, gdy naciskasz C-x C-t
na nazwę skrótu (lub tylko jego początku), Vim powinien wyświetlać w menu podręcznym wszystkie skróty, które znajdują się w tej samej linii.
Oto jak by to wyglądało:
Pamiętaj, że skróty nie muszą zaczynać się od tych samych znaków, aby je pogrupować, mogą być zupełnie inne. Dopóki znajdują się w tej samej linii w pliku synonimów, Vim pokaże je wszystkie.
I nie musisz używać języka programowania, aby zdecydować, w której grupie umieścić skrót. Możesz je pogrupować według dowolnych znaczących podobieństw / tematów / kategorii.
Jeśli więc zapomnisz określony skrót, możesz wpisać pierwsze litery kategorii, nacisnąć C-x C-t
i wybrać odpowiednią w menu.
Edycja:
aby zrzucić wszystkie skróty /home/user/mysynonyms.txt
, możesz użyć 3 poleceń 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')
Edycja2:
Dodałem flagę, n
gdy substitute()
funkcja jest wywoływana, ponieważ nie potrzebujesz żadnego podstawienia. Jego jedynym celem jest dodanie skrótu do listy, gdy tylko zostanie znaleziona.
Ale ponieważ masz wiele skrótów, może to spowodować bezużyteczne spowolnienie procesu, nie wiem. Początkowo nie umieściłem tego, ponieważ nie wiem, jakiej wersji Vima używasz. Jeśli twoja wersja jest nowsza niż 7.3.627 , powinna być w porządku, w przeciwnym razie będziesz musiał usunąć n
flagę.