パターンを現在の行番号に置き換えます


15

このファイルの「x」を現在の行番号に置き換えたいと思います。つまり、変更

x
x
x

1
2
3

今のところ、Perlのワンライナーを使用しています。

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

UltraEditは、垂直方向の選択と置換でそれができると思います。これをvimで実行できますか?(ここでの私の例では、 'x'が1行にすべてあると仮定しています。しかし、実際のファイルの行ははるかに複雑です。)

回答:


23

はい、vimはこれを行うことができます!をグローバルに検索しx、に置き換え\=printf("%d", line('.')ます。例えば:

:%s/x/\=printf("%d", line('.'))

x必要に応じて、別の検索に変更することもできます。

説明:

これにより、x(または検索するもの)が出現するたびに評価レジスタに置き換えられます\=。このレジスタはvimscriptコードを評価し、文字列を返します。この場合、評価されるコードは「現在の行を10進数として印刷する」です。


9

垂直選択と置換について述べたので、あなたもそれをすることができます。を使用CtrlVして置換するテキストのロックを選択し、 c0を入力して0に置き換えます。次に、それらの0を選択します。

ここに画像の説明を入力してください

次にg<c-a>g+ Ctrla)を押します:

ここに画像の説明を入力してください

単一の列を置き換えた場合gv、同じ領域をすばやく再選択するために使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.