Vim: 複数行に渡って同じ文字を挿入する 質問する

Vim: 複数行に渡って同じ文字を挿入する 質問する

場合によっては、複数の行にわたる特定の視覚的なテキスト ブロックを編集したいことがあります。

たとえば、次のようなテキストがあるとします。

name
comment
phone
email

そして、このように見えるようにします

vendor_name
vendor_comment
vendor_phone
vendor_email

現時点で私がやっている方法は…

  1. を4 回押してV、ブロックの 4 行すべてを選択します。j
  2. でインデントします>
  3. で1文字戻りますh
  4. でブロックビジュアルモードに切り替えますCtrlv
  5. 4 回押して 4 行下を選択しますj。この時点で、4x1 の視覚的な空白ブロック (4 行と 1 列) が選択されています。
  6. を押しますC。1 列分だけ左にインデントされていることに注意してください。
  7. 引用符なしで「a」と入力します" vendor_"。戻さなければならなかった余分なスペースに注意してください。
  8. を押します。これは、挿入モードを終了するためにEsc使用する非常にまれな方法の 1 つです。最初の行のみを編集します。EscCtrlc
  9. 手順 1 を繰り返します。
  10. 反対方向にインデントします<

単語の前に少なくとも 1 列の空白がある場合は、インデントする必要はありません。 で視覚的なブロックをクリアする必要がなければ、空白は必要ありませんc

しかし、クリアする必要がある場合、インデントで必要な空白を作成せずに、上記で実行したことを実行する方法はありますか?

また、複数の行を一度に編集するには、Escoverを使用して挿入モードを終了する必要があるのはなぜですかCtrlc?


より複雑な例を次に示します。

name    = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone   = models.CharField( max_length = 135, blank = True )
email   = models.EmailField( blank = True )

name    = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone   = models.whatever.CharField( max_length = 135, blank = True )
email   = models.whatever.EmailField( blank = True )

この例では、 上で垂直ビジュアル ブロックを実行し.、挿入モードで再度挿入します ( と入力します) 。これで、この方法の欠点がおわかりいただけたと思います。垂直位置ですべて同じ.whatever.テキストの列のみを選択するように制限されています。

ベストアンサー1

  1. カーソルを に移動しnますname
  2. ビジュアルブロックモード(Ctrlv)に入ります。
  3. j3回押す3jと(または)3行下に移動します。G(大文字のg)を押すと最後の行に移動します。
  4. I(大文字のi)を押します。
  5. と入力しますvendor_。注: が押されるまでは、画面の最初の行のみが更新されますEsc(6.)。 が押された時点で、すべての行が更新されます。
  6. プレスEsc

方法を説明するミニスクリーンキャスト

小文字は文字列の始まりとして解釈されるためI、小文字ではなく大文字を使用する必要があります。iiテキストオブジェクトこれは、タグブロック内の選択など、それ自体でも非常に便利です(it):

「it」テキストオブジェクトの有用性を示すミニスクリーンキャスト

おすすめ記事