3

ファイルの一部が外部プログラムによって生成されたテキストを書いていることに気付くことがあります。たとえば、次のようなCソースファイルについて考えてみます。

/*
 * To regenerate the following data, place the cursor at the beginning
 * of the next line after this comment, then run
 *   ma:r!find /foo -name '*.in' | xargs whatever | some complicated processing
 * and merge the result with
 *   'a!}sort -u
 */
some
generated
stuff
here

マウスを使用して最初のコマンド(ma:...)を選択し、貼り付けて実行し、コマンドが終了するのを待ってから、選択'a!}sort -uして貼り付けて実行します。完全に自動化できると思うのは半自動だけなので、それはエレガントではありません。と友達のためにvimオンラインヘルプを読んだのです:executeが、それは私が望んでいることをしていないようです。vimレジスタに適切なコマンドを入力してから、レジスタの内容を実行することを考えています。オンライン:help registersはこれまでのところ手がかりを与えていませんでした。

理想的には、新しいコメントは次のようになります

/*
 * To regenerate the following data, place the cursor on the 'j' on the
 * next line in this comment, then execute it with <SHORT-MAGIC-VIM-INCANTATION>
 *   jjma:r!find /foo -name '*.in' | xargs whatever | ...<CR>'a!}sort -u<CR>
 */

これはどのように達成できますか?

4

2 に答える 2

4

通常モードのコマンドではなく、Exコマンドを処理するようmaにします(例のように)。後者を介して実行するのは簡単ですが:normal ma、Exコマンドを通常モードにフィードすると、エスケープの問題が発生します(たとえば、Exコマンドを終了する必要があるをどのようにエンコードしますEnterか?)

カスタムコマンドは次のとおりです。

command! -bar -range ExecuteFromCursor execute 'normal! "zy$' | @z

そして、ここにマッピングがあります:

nnoremap <Leader>e "zy$:@z<CR>
于 2012-09-28T11:02:21.027 に答える
3

レジスターを実行するIngoの方法を編集@"することは、私のものよりも簡単です(の代わりに<^R>")。

私のアプローチの利点は、Enterキーを押して実行する前に、他のコマンドラインと同じようにインタラクティブにコマンドラインを編集できることです。

やる

y$:<^R>"
  • y$ 行末までヤンク
  • : コマンドモードの開始
  • C-r" ヤンクされたテキストを挿入

Enterキーを押して、利益を上げます。


以前は似たようなものをマッピングしていました。しかし、私は怠惰になりY、コマンドラインを編集して編集することがよくあります。WindowsではShift-Insert、vimコマンドラインで少しスムーズになっているので"+Y、Windowsクリップボードにコピーするために使用します。しかし、私は逸脱します

于 2012-09-28T10:37:10.313 に答える