8

2つの列の間のすべての行のコンテンツを削除したいと思います。どうすればよいですか?

たとえば、私はこれが欲しいです:

abcdefg
hijklmn
opqrstu

3列目から5列目までのテキストを削除すると、次のようになります。

abfg
himn
optu
4

5 に答える 5

18

カーソルをdに置きCtrl-V、、、、およびを押します。lGd

  • Ctrl-vビジュアルブロックモードに入ります。
  • l視覚的な選択を1文字右に展開します。
  • G選択範囲を最後の行に展開します。
  • d選択を削除します。
于 2012-05-17T19:23:19.740 に答える
8

あなたの質問はこれと非常に似ています。

ファイル内のすべての行の列3から5を削除するには:

:%normal 3|d6|

特定の行間隔(80〜90)を削除するには、次を使用します。

:80,90normal 3|d6|

通常のコマンドや|に精通していない場合 「モーション」には簡単な説明があります。

  1. このnormalコマンドは、通常モードで次のコマンドを実行します。
  2. | 「モーション」はカーソルを指定された列に3|移動するので、カーソルを3番目の列に移動します。
  3. 次にd、5列目()まですべて()を削除します6|
于 2012-05-18T13:17:51.523 に答える
4

自発的な編集の場合は、CTRL-V(WindowsではCTRL-Qにマップされることが多い)を介してブロック単位のビジュアルモードを使用してから、それdを削除します。

これを頻繁に行う場合、広い範囲/バッファ全体に対して、または繰り返し行う場合は、次の例のように、仮想列で一致を開始し、最後の列まで(上に)拡張する置換を使用します。

%s/\%3v.*\%<7v//
于 2012-05-17T19:29:08.427 に答える
3

検索と置換を使用できます。

:%s/..\zs...\ze

またはより一般的な形式で:

:%s/.\{2}\zs.\{3}\ze

ここで、最初の数値(2)は列のインデックス(ゼロベース)であり、2番目の数値(3)は列の文字数です。

説明:

:%s/バッファ全体を検索して置換します。

.\{2}\zs2つの文字を見つけて、ここで一致の開始を設定します。

.\{3}\ze3つの文字を見つけて、ここで試合の終了を設定します。

一致を削除するため、置換文字列を省略します。

HTH

于 2012-05-18T07:26:35.280 に答える
0

私は次のようにします:

:%s/^..\zs.*\ze..$//g

これにより、最初の2つの列と、最後の2つの列から他のすべてが削除されます。

于 2015-10-18T13:02:51.690 に答える