2009-08-24 6 views
5

Si je voulais traiter un lot de fichiers texte avec le même ensemble de commandes par exemple:

Vim - comment stocker et exécuter des commandes couramment utilisées?

: set tw = 50
gggqG

Puis-je sauvegarder ci-dessus et l'exécuter avec une commande de raccourci?

+0

Je n'utilise vim (Emacs ... ;-)) mais la fonction que vous voulez doit être appelée « macro » comme partout, vous devez google pour cela. – p4bl0

+0

La voici: http://vim.wikia.com/wiki/Macros :-) – p4bl0

+0

Vous recherchez "vim macro". – Johan

Répondre

9

Ce qui suit dans .vimrc définira une nouvelle commande Wrap qui fait ce que vous voulez.

command! Wrap :set tw=50 | :normal gggqG 

Appelez avec :Wrap

12

Si vous ne souhaitez l'utiliser qu'une seule fois, utilisez une macro comme indiqué dans les autres réponses. Si vous voulez le faire plus souvent, vous pouvez inclure la ligne suivante dans votre fichier .vimrc:

:map \r :set tw=50<CR>gggqG 

Cela carte \r pour faire vos deux lignes à exécuter chaque fois que vous appuyez sur \r. Bien sûr, vous pouvez également choisir un raccourci différent, comme <C-R> (Ctrl + R) ou <F12> ou quelque chose.

+0

Puis-je le mapper sur une commande tapée plutôt que sur un raccourci clavier (comme l'exécution d'un script)? Je peux imaginer que je vais manquer de clés sinon! – Fred

+0

Oui, vous pouvez même le mapper à 'hellomynameisjon' si vous aimez :). – jqno

+0

Donc ce serait ": map \ hellomynameisjon: set tw = 50 gggqG"? et je viens de frapper ESC, puis le taper? – Fred

0

Oui, le mot important est macro

Mais il semble comme une « commande » tels que: set tw = 50 serait mieux inclus dans le fichier .vimrc si vim utilise chaque fois que vous le lancez .

6

En début rapide, mettez dans votre .vimrc:

" define the function 
" '!' means override function if already defined 
" always use uppercase names for your functions 
function! DoSomething() 
    :set tw=50 
    gggqG 
endfunction 

" map a keystroke (e.g. F12) in normal mode to call your function 
nmap <F12> :call DoSomething()<CR> 

Note: le code formaté semble au-dessus plutôt horrible, mais les lignes commençant par "des commentaires

2

autres que des macros,. vous pouvez utiliser argdo Cette commande effectue la même opération sur tous les fichiers ouverts Voici comment vous formatez tous les fichiers ouverts en utilisant :argdo et :normal:..

shell> vim *.txt 

:argdo exe "normal gggqG"|up 
1

Avant d'écrire des milliers-lignes .vimrc (ce qui est une bonne chose, mais vous pouvez le reporter pendant un certain temps), je pense que vous pourriez vouloir regarder l'enregistrement en clair, en particulier vous pouvez envisager d'utiliser le x (où x est une touche quelconque) pour l'enregistrement, q pour terminer l'enregistrement et @x pour exécuter une macro enregistrée.

+0

Je vais seulement exécuter la macro une fois par fichier. Y a-t-il un moyen de sauvegarder l'enregistrement? – Fred

+0

Pour vous dire la vérité, je n'ai aucune idée ;-) Je ne pense pas. Mais l'enregistrement persiste dans tous les fichiers tant que vous ne quittez pas vim. Essayez ': aider à répéter». –

Questions connexes