viエディタで複数行の単語を置き換える方法は?

viエディタで複数行の単語を置き換える方法は?

たとえば、viエディタで「today」という単語が8行のファイルを生成しましたが、1つのコマンドで4行を「yesterday」という単語に置き換える方法を知りたいと思います。

答え1

ファイルの内容に対して機能するほとんどのexコマンド(つまり、:(コロン)とコマンド名を押して呼び出されるコマンド)は、コマンドの前に範囲を指定できます。この範囲は、コマンドの影響を受ける行を指定します。範囲の一般的な形式は、カンマで区切られた2つの数字です。コマンドは、最初の数字から2番目の数字(含む)までのすべての行で機能します。例えば

1,4s/today/yesterday/g

ファイルの最初の4行でbyをすべて置き換えますtodayyesterday

数字の前に記号を追加して、現在の行に基づいて作成できます。例えば

-1,+1s/today/yesterday/g

前の行、現在の行、次の行に対して交換を実行します。カンマが含まれているが数字の1つが省略されている場合は、現在の行を表します。

,+1s/today/yesterday/g

現在の行と次の行を置き換えます。$数字の代わりに数字を使用してファイルの最後の行を表すこともできます。カンマを省略して数値のみを指定した場合、コマンドはこの行でのみ機能します。

+1s/today/yesterday/g

次の行でのみ交換を実行してください。

答え2

次のコマンドを使用できます。

:n,m s/today/yesterday/

つまり、n行からm行まで「today」という単語を「yesterday」に置き換えます。

答え3

この試み:

viエディタのコマンドモードに入り、次のコマンドを試してください。

:%s/today/yesterday/g

g - 今日を全体的に昨日に変えます。

関連情報