2つの列の間のすべての行のコンテンツを削除したいと思います。どうすればよいですか?
たとえば、私はこれが欲しいです:
abcdefg
hijklmn
opqrstu
3列目から5列目までのテキストを削除すると、次のようになります。
abfg
himn
optu
2つの列の間のすべての行のコンテンツを削除したいと思います。どうすればよいですか?
たとえば、私はこれが欲しいです:
abcdefg
hijklmn
opqrstu
3列目から5列目までのテキストを削除すると、次のようになります。
abfg
himn
optu
あなたの質問はこれと非常に似ています。
ファイル内のすべての行の列3から5を削除するには:
:%normal 3|d6|
特定の行間隔(80〜90)を削除するには、次を使用します。
:80,90normal 3|d6|
通常のコマンドや|に精通していない場合 「モーション」には簡単な説明があります。
normal
コマンドは、通常モードで次のコマンドを実行します。3|
移動するので、カーソルを3番目の列に移動します。d
、5列目()まですべて()を削除します6|
。自発的な編集の場合は、CTRL-V(WindowsではCTRL-Qにマップされることが多い)を介してブロック単位のビジュアルモードを使用してから、それd
を削除します。
これを頻繁に行う場合、広い範囲/バッファ全体に対して、または繰り返し行う場合は、次の例のように、仮想列で一致を開始し、最後の列まで(上に)拡張する置換を使用します。
%s/\%3v.*\%<7v//
検索と置換を使用できます。
:%s/..\zs...\ze
またはより一般的な形式で:
:%s/.\{2}\zs.\{3}\ze
ここで、最初の数値(2)は列のインデックス(ゼロベース)であり、2番目の数値(3)は列の文字数です。
説明:
:%s/
バッファ全体を検索して置換します。
.\{2}\zs
2つの文字を見つけて、ここで一致の開始を設定します。
.\{3}\ze
3つの文字を見つけて、ここで試合の終了を設定します。
一致を削除するため、置換文字列を省略します。
HTH
私は次のようにします:
:%s/^..\zs.*\ze..$//g
これにより、最初の2つの列と、最後の2つの列から他のすべてが削除されます。