2011-08-11 8 views
19

目的は、現在の行をTODOとして使用し、これをいくつかの外部プログラムに送信することです。このような何かを:現在の行をvimの外部コマンドに送ります(キャプチャなし)

:! /usr/bin/todo "content of current line" 

私はフィルタリングコマンドを知っているが、これは私が望んでいない現在のバッファを編集することを意味し(:。!フィルタとして機能します)。私は現在のファイルを '%'で取得する方法を知っていますが、他のコンテンツを取得する方法はありませんか?多分使用して:トリックを行う必要があります

"1y$ //yank current row to register 1 
: CTRL-R 1 //CTRL-R followed by register id pastes register to command line 

:実行...

答えて

28

:.!はフィルタとして機能しますが、:.w !(スペースを忘れないように!)だけ出力を渡します。 :help :w_cを参照してください。私。

:.w !/usr/bin/todo - 
+0

これはまさに私が検索したものです。私はこのマップのようなマッピングで終了しました ta:silent .w!todo 現在の行からtodoを作成します。ありがとう! – gaspard

+1

私は似たようなことに興味があったので、この答えを見てupvoted。カーソル位置から始まるファイルに対して外部コマンドを実行するために、私は以下を使用しました:。、$ w!command& – magnetar

+0

私は動作しません。 :.w!ls ls:アクセスできません - :そのようなファイルやディレクトリがありません シェルは2 – ka3ak

3

をあなたはそうのようなものをやって、コマンドラインにレジスタの内容を挿入することができます。あなたは、これらのマッピング(つまり、あなたの.vimrcに保存したり、プロンプト:に貼り付ける)のようなものを好むかもしれない

0

:!/usr/bin/todo ^R' 

(タイプ:

cmap <C-R>'   <C-R>=shellescape(getline('.'))<CR> 
cmap <C-R><C-R>' <C-R><C-R>=shellescape(getline('.'))<CR> 

は一度インストールし、あなたがこのようにそれらを使用します実際のコントロール - R上記の例は^Rを示しています)。

あなたが「虚」が 'を登録常にシェル引用されたが含まれていregistereベースのコントロール-Rおよびコントロール-Rコントロール-R( :help c_CTRL-R、および :help c_CTRL-R_CTRL-Rを参照)のコマンドラインモード版と考えることができます

現在の行の内容

これらのマッピングは、ビルトインのマッピングと同じプレフィックスを使用するので、あなたは、timeoutlenミリ秒(:set timeoutlen?を参照)の中に、最終的な単一引用符を入力する必要があります(上記の:helpのトピックを参照してください)、またはそれがデフォルトになります内蔵のマッピング(:help map-typing参照)。

関連する問題