2

次のキーマップがあります:

nmap <F9> :s/^/\/\*! /<cr>:s/$/ !\*\//<cr>j

C スタイルのコメント行を意図しています。叩く<F9>とうまくいきます。しかし、(指定された行数をコメントするために)番号を前に付けようとすると*/、最後の行を除くすべての行で閉じ括弧がありません。次のようになります。

/*! foo1;
/*! foo2;
/*! foo3; !*/

コメントを外すための同様のキーマップがあります:

nmap  <F10>   :s/^\/\*! //e<cr>:s/ !\*\/$//e<cr>j

状況は類似しています(閉じ括弧を削除しません)。

編集:

ハ!解決策を見つけました。

4

2 に答える 2

2

実際vimには、キーマップは通常 lineranges をサポートしていません。ただし、いくつかの回避策があります。

  1. (行の) 視覚的な選択を設定し、マッピングを次のように変更しますnmap <F9> :'<,'>s/^/\/\*! /<cr>:'<,'>s/$/ !\*\//<cr>jnmap <F9> :'<,'>s/^/\/\*! /|'<,'>s/$/ !\*\//<cr>j
  2. しかし、これにはプラグインを使用することをお勧めします: NERD コメンターは本当に有能です...
于 2012-09-02T20:17:40.593 に答える
2

うーん...トリッキー。これは、最初の代替コマンドが range に変換されていることに関係しています:.,.+nが、2 番目の代替コマンドは最終行でのみ機能します。なぜそうなったのかはよくわかりませんが、単一の置換に変換すると問題が解決します。したがって、1 つの呼び出しに折りたたんでから少し整理すると、次のようになります。

nnoremap <F9> :s!.*!/* & */!<CR>j

(!代わりに/をパターン セパレータとして使用することに注意してください。:s(ほとんど) 任意の文字で使用できます。/は単なるデフォルトです。パターンで多くの/s を使用する場合は、何か他のものを使用してエスケープを節約することをお勧めします。)

于 2012-09-02T22:34:16.847 に答える