Ich weiß nicht, wie ich über 500 Abkürzungen am besten verwalten kann. Vielleicht könnten Sie sich, wie @statox erklärte, auf lange Sicht Schnipsel ansehen, um diese Zahl zu reduzieren.
Wenn Sie Abkürzungen automatisch vervollständigen möchten, können Sie den folgenden Code ausprobieren:
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
Um es zu verwenden, müssten Sie C-x C-u
nach dem Beginn einer Abkürzung drücken.
Das Autocmd richtet die Variable ein, s:abbrev_list
die alle Ihre Abkürzungen enthalten soll.
Die Funktion CompleteAbbrev()
sollte eine Liste von Kandidaten basierend auf dem Wort vor dem Cursor zurückgeben.
Der 'completefunc'
Wert der Option teilt Vim mit, welche Funktion beim Drücken aufgerufen werden soll C-x C-u
.
Beachten Sie, dass die Option lokal für den Puffer ist, sodass Sie weiterhin andere Funktionen in verschiedenen Puffertypen verwenden können, FileType
z. B. mit einem Autocmd und dem Ereignis.
Sehen Sie :h complete-functions
für weitere Informationen darüber , wie die Funktion arbeitet.
Eine andere Lösung wäre die Verwendung der Synonymvervollständigung. Von :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.
Um diese Lösung zu verwenden, müssten Sie drei Dinge tun:
- Schreiben Sie
{lhs}
alle Ihre Abkürzungen in eine dedizierte Datei.
Zum Beispiel /home/user/mysynonyms.txt
. Und gruppieren Sie sie um ähnliche Themen.
Fügen Sie der Option den Pfad zu dieser Datei hinzu 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Treffen Sie C-x C-t
nach dem Beginn des Namens einer Abkürzung innerhalb einer Gruppe.
Angenommen, Sie haben die folgenden Abkürzungen:
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
Sie können sie nach der Programmiersprache gruppieren, zu der sie gehören.
Im Inneren /home/user/mysynonyms.txt
würden Sie schreiben:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Wenn Sie jetzt C-x C-t
nach dem Namen einer Abkürzung (oder nur nach dem Anfang) klicken, sollte Vim im Popup-Menü alle Abkürzungen anzeigen, die sich in derselben Zeile befinden.
So würde es aussehen:
Beachten Sie, dass die Abkürzungen nicht mit denselben Zeichen beginnen müssen, um gruppiert zu werden. Sie können völlig unterschiedlich sein. Solange sie sich in Ihrer Synonymdatei in derselben Zeile befinden, zeigt Vim alle an.
Und Sie müssen nicht die Programmiersprache verwenden, um zu entscheiden, in welche Gruppe eine Abkürzung eingefügt wird. Sie können sie nach jeder sinnvollen Ähnlichkeit / Thema / Kategorie gruppieren, die Sie sich vorstellen.
Wenn Sie also eine bestimmte Abkürzung vergessen, können Sie die ersten Buchstaben einer Kategorie eingeben C-x C-t
, die entsprechende im Menü drücken und auswählen.
Bearbeiten:
Um alle Ihre Abkürzungen darin abzulegen /home/user/mysynonyms.txt
, können Sie diese 3 Ex-Befehle verwenden:
: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:
Ich habe das Flag hinzugefügt, n
wenn die substitute()
Funktion aufgerufen wird, da Sie keine Ersetzung benötigen. Der einzige Zweck besteht darin, eine Abkürzung in eine Liste einzufügen, wenn eine gefunden wird.
Aber weil Sie viele Abkürzungen haben, könnte dies den Prozess nutzlos verlangsamen, ich weiß es nicht. Anfangs habe ich es nicht gesagt, weil ich nicht weiß, welche Vim-Version Sie verwenden. Wenn Ihre Version neuer als 7.3.627 ist , sollte dies in Ordnung sein, da Sie sonst das n
Flag entfernen müssten .