ビジュアルモードでVimを置き換える

ビジュアルモードでVimを置き換える

このようなテストブロックでは

cron.allow
cron.deny

cronの代わりにatを使いたいです。ビジュアルモード(ctrl + v)で選択した範囲内でのみctrl + vを押すと!プロンプト「Okay, I do」が表示されます。

sed s:cron:at:gc

ただし、このエラーのみが表示されます。

:'<,'>! sed s:cron:at:gc
shell end return code 1
7 lines filteerd

そして戻った後の結果

sed: expression -e #1, caracther 12: option `s' unknown

なぜ?

答え1

visual blockライン選択モードになっている場合は、以下を試してください。

:'<,'>s/cron/at/g

Vimには、外部コマンドを呼び出す必要がない検索と置換機能があります。

答え2

コマンドラインで成功を観察します。

$ echo cron | sed s:cron:at:
at

しかし、そうではありません:

$ echo cron | sed s:cron:at:c
sed: -e expression #1, char 11: unknown option to `s'

cオプションではありませんsed。しかし、以下はうまくいきます。

:'<,'>! sed s:cron:at:g

しかし、もちろん、sedvimではそれほど簡単な交換を行う必要はありません。また、必要に応じてc(確認)vimの組み込み代替コマンドを使用してください。

:'<,'>s/cron/at/gc

答え3

sedや代替を全く使う必要がないようです。変更(c)コマンドを使用してください。ドキュメントから:

Visual-block change                       *v_b_c*
All selected text in the block will be replaced by the same text string.  When
using "c" the selected text is deleted and Insert mode started.  You can then
enter text (without a line break).  When you hit <Esc>, the same string is
inserted in all previously selected lines.

ここで鍵は、クリックすると、<Esc>以前に選択したすべての行に同じ文字列が挿入されます。したがって、あなたがする必要があるのは、テキストを選択してcron、キーを押して、入力し、挿入モードを終了することだけです。これにより、cブロック内のat各項目をに置き換える必要な結果を得ることができます。cronat

ブロックに対して置換コマンドを実行するには、ブロックを切り取り、空白行に貼り付け、その行に対して置換を実行し、結果のブロックを切り取り、元の場所に再貼り付けます。

あなたの質問のコマンドの問題は、外部を使用しようとしていますが、コマンドがフラグを受け入れないことですsedssedc

関連情報