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.
\vi?abbr\s+(\k+)
? Pourriez-vous me donner un lien avec un extrait de vos abréviations, pour voir si je peux reproduire votre problème?n
indicateur à l'appel de remplacement (j'ai modifié la réponse pour l'inclure). Si vous effectuez une recherche dans votrevimrc
et que vous copiez-collez cela\v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+
, cela met-il en évidence vos abréviations?Un conseil wikia suggère une méthode pour afficher sélectivement vos abréviations:
Vous pouvez répertorier toutes vos abréviations avec
(remplacer
ab
pariab
pour répertorier uniquement les abréviations du mode d'insertion)Et vous pouvez lister toutes les abréviations avec le même préfixe avec
Ce n'est pas aussi idéal qu'un achèvement sur les abréviations, mais cela pourrait être un bon moyen d'avoir rapidement une liste de vos abréviations existantes.
Pour rendre cette solution plus efficace, une bonne pratique serait de créer une abréviation spécifique à un type de fichier. Par exemple, cette abréviation n'est utile que dans un tampon java:
Il est donc bon de le définir comme ceci:
La partie autocommande permet de créer l'abréviation uniquement lorsque vous êtes dans un tampon java et l'
<buffer>
option rend l'abréviation accessible uniquement à partir de ce tampon.De cette façon
:iab
, l’abréviation ne sera affichée que lorsque vous serez dans un tampon java. Si vous avez beaucoup d'abréviations, il pourrait être intéressant de créer une fonction par type de fichier qui définirait toutes les abréviations et laisserait l'autocommande appeler la fonction. Quelque chose comme:Une autre solution pourrait être de créer votre propre fonction de saisie semi-automatique en utilisant une liste de vos abréviations comme source de mots-clés.
Enfin, je dois dire que je suis assez impressionné par "plus de 500 abréviations", je ne sais pas lesquelles vous utilisez, mais il serait peut-être intéressant pour vous de jeter un œil au concept d'extraits de code si vous n'êtes pas familier avec eux. Comme ce sont des modèles qui sont déclenchés en entrant un mot-clé et en appuyant sur une touche de raccourci, ils sont plus flexibles que les abréviations, cela pourrait vous permettre de réduire le nombre d'abréviations que vous utilisez. Voir ici pour une introduction intéressante.
la source
Que diriez-vous de regrouper les abréviations par type de fichier?
Au lieu de les avoir tous dans votre
~/.vimrc
fichier, décomposez-les et placez-les aux emplacements appropriés dans votre répertoire d'exécution, qui se trouve~/.vim
sur les systèmes d'exploitation de type Unix.Par exemple, vos abréviations Markdown seraient situées dans le fichier
~/.vim/after/ftplugin/markdown.vim
, que Vim vérifie après le chargement du plugin de type de fichier Markdown.Il s'avère que nous ne devrions pas avoir d'énormes
.vimrc
fichiers; vous obtenez plus de flexibilité en utilisant$VIMRUNTIME
. Le chemin d'exécution est documenté dans le système d'aide de Vim::h 'runtimepath'
.J'ai d'abord appris cela à travers l'excellent article De .vimrc à .vim sur le calendrier de l'avent sur le thème de Vim Vimways .
la source