2009-08-24 19 views
5

私は例えばコマンドの同じセットでテキストファイルのバッチを処理したい場合:

Vim - よく使われるコマンドを保存して実行する方法は?

:セットTW = 50
gggqG

私は上記を保存してそれを実行することができますショートカットコマンド?

+0

でそれを呼び出しますが、あなたが望む機能を使用すると、そのためにGoogleなければならない、などどこでも「マクロ」と呼ばれている必要があります。 – p4bl0

+0

ここにあります:http://vim.wikia.com/wiki/Macros :-) – p4bl0

+0

"vim macro"を探しています。 – Johan

答えて

9

次の.vimrcは、あなたが望むことを行う新しいコマンドWrapを定義します。

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

が、私はVIM(Emacsの...を;-))を使用しない:Wrap

12

一度だけ使用したい場合は、他の回答のいくつかで指定されているようにマクロを使用してください。

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

これは、あなたが\rを押すたびに二行を実行させるために\rをマッピングします:あなたはより頻繁にそれを実行したい場合は、あなたの.vimrcファイルに次の行を含めることができます。もちろん、<C-R>(Ctrl + R)や<F12>などの別のショートカットを選択することもできます。

+0

キーボードショートカット(スクリプトの実行など)ではなく、入力コマンドにマップできますか?私はそうでなければキーを使い果たすだろうと私は想像することができます! – Fred

+0

はい、あなたが好きなら 'はい、hellomynameisjon'にマップすることもできます。 – jqno

+0

これは ":map \ hellomynameisjon:set tw = 50 gggqG"ですか?私はちょうどESCを押して、それを入力しますか? – Fred

0

はい、重要な単語はマクロ

である。しかし、それは「コマンド」のように思えるような:セットTW = 50あなたがそれを起動するたびに、それを使用していますvimのはとても良く.vimrcファイルに含まれることになります。

6

非常にクイックスタートとして、あなたの.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> 

注:フォーマットされた上記のコードはかなり恐ろしい見えますが、 "で始まる行はコメントで、マクロ以外

2

を、。あなたはargdoを使用することができます。このコマンドは、開いているすべてのファイルに対して同じ操作を実行しますここでは、:argdo:normalを使用して開いているすべてのファイルをフォーマットする方法である:。。

shell> vim *.txt 

:argdo exe "normal gggqG"|up 
1

何千もの行を書き込む前に(良いことですが、しばらく延期することができます)、普通の録音を見たいと思うかもしれません。特に、qxxは任意のキー)、記録を終了する場合はq、記録したマクロを実行する場合は@xです。

+0

ファイルごとに一度だけマクロを実行します。録音を保存する方法はありますか? – Fred

+0

真実を伝えるために、私は考えていません;-)私はそうではないと思います。しかし、vimを終了しない限り、録音はすべてのファイルに保存されます。 ':help repeat'を試してみてください。 –

関連する問題