Je ne sais pas quelle est la meilleure façon de gérer plus de 500 abréviations. Peut-être qu'à long terme, comme l'a expliqué @statox, vous pourriez jeter un œil aux extraits de code pour réduire ce nombre.
Et si vous souhaitez compléter automatiquement les abréviations, vous pouvez essayer le code suivant:
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
Pour l'utiliser, vous devez taper C-x C-u
après le début d'une abréviation.
L'autocmd configure la variable s:abbrev_list
qui doit contenir toutes vos abréviations.
La fonction CompleteAbbrev()
doit renvoyer une liste de candidats basée sur le mot devant le curseur.
La 'completefunc'
valeur de l'option indique à Vim quelle fonction appeler lorsque vous appuyez C-x C-u
.
Notez que l'option est locale au tampon, vous pouvez donc toujours utiliser d'autres fonctions dans différents types de tampons, en utilisant un autocmd et l' FileType
événement par exemple.
Voir :h complete-functions
pour plus d'informations sur le fonctionnement de la fonction.
Une autre solution serait d'utiliser l'achèvement des synonymes. De :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.
Pour utiliser cette solution, vous devez faire 3 choses:
- Écrivez
{lhs}
toutes vos abréviations dans un fichier dédié.
Par exemple /home/user/mysynonyms.txt
,. Et regroupez-les autour de thèmes similaires.
Ajoutez le chemin d'accès à ce fichier à l'option 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Frappez C-x C-t
après le début du nom de toute abréviation à l'intérieur d'un groupe.
Par exemple, supposons que vous ayez les abréviations suivantes:
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
Vous pouvez les regrouper en fonction du langage de programmation auquel ils appartiennent.
A l'intérieur /home/user/mysynonyms.txt
, vous écririez:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Maintenant, chaque fois que vous frappez C-x C-t
après le nom d'une abréviation (ou juste son début), Vim devrait afficher, dans le menu contextuel, toutes les abréviations qui sont sur la même ligne.
Voici à quoi cela ressemblerait:
Notez que les abréviations n'ont pas besoin de commencer par les mêmes caractères pour être regroupées, elles peuvent être entièrement différentes. Tant qu'ils sont sur la même ligne dans votre fichier de synonymes, Vim les affichera tous.
Et vous n'avez pas besoin d'utiliser le langage de programmation pour décider dans quel groupe mettre une abréviation. Vous pouvez les regrouper en fonction de toute similitude / sujet / catégorie significative que vous avez en tête.
Ainsi, lorsque vous oubliez une abréviation spécifique, vous pouvez taper les premières lettres d'une catégorie, appuyer sur C-x C-t
et choisir celle qui convient dans le menu.
Edit:
Pour vider toutes vos abréviations à l'intérieur /home/user/mysynonyms.txt
, vous pouvez utiliser ces 3 commandes 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:
J'ai ajouté le drapeau n
lorsque la substitute()
fonction est appelée car vous n'avez besoin d'aucune substitution. Son seul but est d'ajouter une abréviation à l'intérieur d'une liste chaque fois qu'elle est trouvée.
Mais parce que vous avez de nombreuses abréviations, cela pourrait ralentir inutilement le processus, je ne sais pas. Au départ, je ne l'ai pas mis parce que je ne sais pas quelle version de Vim vous utilisez. Si votre version est plus récente que 7.3.627 , cela devrait être correct, sinon vous devrez supprimer le n
drapeau.