viモードのコマンドラインでグローバル置換を実行する方法プレフィックスを追加してexコマンドを使用できないようですが、どうすればよいですか:
?
たとえば、コマンドのすべての内容を次のように置き換えるには\
.../
答え1
私は使用しますバッシュ履歴メカニズム:
$ echo 'foo\bar\baz'
foo\bar\baz
$ !!:gs/b/B/
echo 'foo\Bar\Baz'
foo\Bar\Baz
しかし、バックスラッシュを次に置き換えることはできないようです。
$ echo 'foo\bar\baz'
foo\bar\baz
$ !!:gs/\\/\//
bash: :gs/\\/\//: substitution failed
答え2
viコマンドモード時
:1,$s+\\+/+g
これにより、すべてのバックスラッシュ文字がスラッシュに置き換えられます。
答え3
vi
これを行う方法はいくつかあります。スピーチみんなex
行(「:」行)には、%
またはを使用できます1,$
。同様に、それは他のものを許可します区切り記号for s
(代替コマンド).したがって、次のように変更できます。
:%s/\\/\//g
:%s,\\,/,g
:1,$s/\\/\//g
:1,$s,\\,/,g
ポイントは
- バックスラッシュ円置換に使用する正規表現の文字で、次のようにする必要があります。脱出するそれを使って、
- 区切り記号は句読点でなければなりません。
- 最後に、(最初と3番目の例では)次のものを使用できます。区切り記号前後の文字列の一部として使用されますが、この場合もエスケープする必要があります。
答え4
vi内で\を/にグローバルに置き換えるのに問題がある場合、最初の文字は特殊文字なのでエスケープする必要があり、2番目の文字は通常sed区切り文字で選択されるため、やはりエスケープする必要があるからです。あなたはそれを使用することができます:
:%!tr '\\' '/'
または
:%s,\\,/,g
または
:%s/\\/\//g
完全性のためにマクロなしで通常のviを使用し、exモードを無効にするには、次の手順を実行する必要があります。
/\\
r/nr/nr/nr/nr/nr/nr/nr/nr/nr/nr/n
最後の手順を好きなだけ繰り返します。フロントモードを使用したくない場合は、どうすればよいかを示すために含めただけです。