2009-11-19 7 views
31

Je sais qu'il ya un moyen de lister les correspondances via :map (ou :imap, :cmap, etc.), mais je ne peux pas trouver un moyen de la liste des macros je stockées dans mon fichier vimrc (comme dans let @a = 'blahblah').Y at-il un moyen d'afficher une liste macro similaire à l'affichage de vos correspondances dans vim?

Est-il possible de le faire sans avoir à regarder manuellement l'intérieur (via :split [myvimrcfile] ou quelque manière)?

De plus, s'il est possible, est-il un moyen de joindre une sorte de documentation qui afficherait avec la macro pour expliquer ce qu'elle est pour? J'ai une poignée que j'utilise pas mal, mais à environ 6 semaines d'intervalle. Ce serait bien de les énumérer Brièvement avec un commentaire qui me dit ce que la macro fait (ou même simplement un nom si je fais que j'utiliser la bonne).

Merci

+0

Cela peut être utile pour écrire des mappages. – AlexMA

Répondre

56

Dans vim, les macros sont simplement stockées dans registers. Vous pouvez rappeler le contenu de n'importe quel registre et l'exécuter comme une macro (ce que fait le @). Pour voir la liste de vos registres, utilisez :reg.

+0

Malheureusement, il ne liste pas la macro dans le registre, sauf si je me souviens d'abord. Je voudrais savoir quelle est la macro que j'ai mappée sur ce registre avant de l'exécuter (donc je sais lequel exécuter). –

+0

Vraiment? Pour les choses que j'ai dans mon '.vimrc' (comme' let @ a = blah'), je suis capable de les voir quand je démarre (gVim 7.2). Avez-vous une fonction ou un script que vous devez exécuter pour définir vos macros? – jheddings

+0

J'utilise aussi gVim7.2. J'ai juste tapé mes macros directement dans mon fichier vimrc ... bien que ce soit dans c: \ program files \ vim \ vimfiles \ vimrc_Jay.vim qui est chargé dans mon fichier _vimrc via la source $ VIM/vimfiles/vimrc_Jay.vim. Pensez-vous que c'est le problème? –

3

Vous pouvez voir le contenu de tous les registres en utilisant la commande

:reg 

. Ou une chaîne d'argument comme ceci

:reg ahx 

va vous montrer le contenu des registres a, h et x.

De cette façon, vous pouvez au moins voir ce que la séquence de commandes sera lancé et nous espérons que ce sera assez clair pour vous dire les uns des autres.

Les registres contiennent simplement du texte. Vous pouvez coller la séquence de commande sous forme de texte dans ou vous pouvez copier du texte dans un registre, puis exécutez comme une commande, selon la façon dont vous accédez au registre.

Je n'ai trouvé aucun moyen direct de modifier le contenu d'un registre, mais vous pouvez le coller dans le fichier, le modifier, puis enregistrez-le à la même registre.

IHTH.

2

Comme /u/jheddings a écrit les macros sont stockées sous forme de registres et ce qui compte est l'attribution du code au registre (généralement fait dans les fichiers vimrc avec let @a=blahblah Pour faciliter la façon d'afficher les macros que vous avez définies dans votre fichier vimrc (dans mon cas, il est dans le répertoire ~/chemin vimrc) vous pouvez utiliser cette fonction vim:

function! ShowMacros() 10new exe 'r!' . 'grep -B 1 -E "^\s*let @" ~/.vimrc' call cursor(1,1) endfunction

ce qu'il fait:

10Le - ouvrir une nouvelle fenêtre vim avec dix lignes taille

exe ​​... - exécuter une commande et mettre dans la fenêtre

appeler ...- aller à la première ligne la première colonne

Vous pouvez exécuter cette fonction par basculement dans le mode normal :call ShowMacros

Vous pouvez en outre créer un mappage clé ou une commande pour fixer la manière d'appeler la fonction:

:cnoremap sm call ShowMacros()<CR> command! sm call ShowMacros()

This est l'article original où j'ai écrit la fonction similaire à ce qui précède.