Non so quale sia il modo migliore per gestire oltre 500 abbreviazioni. Forse a lungo termine, come spiegato da @statox, potresti dare un'occhiata agli snippet per ridurre questo numero.
E se vuoi completare automaticamente le abbreviazioni, puoi provare il seguente codice:
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
Per usarlo, dovresti premere C-x C-u
dopo l'inizio di un'abbreviazione.
Autocmd imposta la variabile s:abbrev_list
che dovrebbe contenere tutte le abbreviazioni.
La funzione CompleteAbbrev()
dovrebbe restituire un elenco di candidati basato sulla parola prima del cursore.
Il 'completefunc'
valore dell'opzione indica a Vim quale funzione chiamare quando si preme C-x C-u
.
Si noti che l'opzione è locale per il buffer, quindi è comunque possibile utilizzare altre funzioni in diversi tipi di buffer, usando ad esempio un autocmd e l' FileType
evento.
Vedi :h complete-functions
per maggiori informazioni su come funziona la funzione.
Un'altra soluzione sarebbe quella di utilizzare il completamento dei sinonimi. Da :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.
Per utilizzare questa soluzione, dovresti fare 3 cose:
- Scrivi
{lhs}
tutte le tue abbreviazioni in un file dedicato.
Ad esempio /home/user/mysynonyms.txt
,. E raggruppali attorno a temi simili.
Aggiungi il percorso a questo file all'opzione 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Premi C-x C-t
dopo l'inizio del nome di qualsiasi abbreviazione all'interno di un gruppo.
Ad esempio, supponiamo di avere le seguenti abbreviazioni:
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
Potresti raggrupparli in base al linguaggio di programmazione a cui appartengono.
All'interno /home/user/mysynonyms.txt
, dovresti scrivere:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Ora, ogni volta che si preme C-x C-t
dopo il nome di un'abbreviazione (o solo l'inizio), Vim dovrebbe visualizzare, nel menu a comparsa, tutte le abbreviazioni che si trovano sulla stessa riga.
Ecco come sarebbe:
Nota che le abbreviazioni non devono necessariamente iniziare con gli stessi caratteri per essere raggruppate, potrebbero essere completamente diverse. Finché si trovano sulla stessa riga nel file dei sinonimi, Vim mostrerà tutti.
E non devi usare il linguaggio di programmazione per decidere in quale gruppo inserire un'abbreviazione. Potresti raggrupparli in base a qualsiasi somiglianza / argomento / categoria significativa che hai in mente.
Quindi, quando si dimentica un'abbreviazione specifica, è possibile digitare le prime lettere di una categoria, C-x C-t
premere e scegliere quella pertinente all'interno del menu.
Modifica:
per scaricare tutte le abbreviazioni all'interno /home/user/mysynonyms.txt
, è possibile utilizzare questi 3 comandi 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')
Edit2:
ho aggiunto il flag n
quando substitute()
viene chiamata la funzione perché non è necessaria alcuna sostituzione. Il suo unico scopo è quello di aggiungere un'abbreviazione all'interno di un elenco ogni volta che ne viene trovata una.
Ma poiché hai molte abbreviazioni, potrebbe rallentare inutilmente il processo, non lo so. Inizialmente, non l'ho messo perché non so quale versione di Vim stai usando. Se la tua versione è più recente della 7.3.627 , dovrebbe essere ok, altrimenti dovresti rimuovere il n
flag.