1. ホーム

[解決済み】Vim:複数行に渡って同じ文字を挿入する

2022-03-24 06:49:43

質問

あるビジュアルブロックのテキストを複数行に渡って編集したいことがあります。

例えば、こんな文章を取り上げます。

name
comment
phone
email

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

vendor_name
vendor_comment
vendor_phone
vendor_email

現在、私が行う方法は...

  1. ブロックの4つの行をすべて選択して V と入力し j を4回。
  2. でインデントします。 > .
  3. で1文字戻る h .
  4. でブロックビジュアルモードに移行します。 Ctrl v .
  5. を押して4行下まで選択します。 j を4回実行します。この時点で、4x1の視覚的な空白ブロック(4行と1列)を選択したことになります。
  6. 押す C . このようにかなり1列分左にインデントされていることに注目してください。
  7. を入力します。 " vendor_" を引用符で囲まないでください。余分なスペースを戻さなければならないことに注意してください。
  8. プレス エスケープ . を使う数少ない機会です。 エスケープ で挿入モードを解除します。 Ctrl c は1行目だけを編集します。
  9. 手順1を繰り返す。
  10. で反対方向にインデントします。 <です。 .

言葉の前に少なくとも1列の空白があれば、インデントする必要はないんです。でビジュアルブロックをクリアする必要がなければ、空白は必要ありません。 c .

しかし、もし私がクリアしなければならないとしたら、インデントで必要な空白を作らずに、上で実行したことを行う方法はあるのでしょうか?

また、複数行の同時編集は、なぜ挿入モードから エスケープ オーバー Ctrl c ?


さらに複雑な例を挙げます。

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. にカーソルを移動します。 nname .
  2. ビジュアルブロックモードに入る( Ctrl v ).
  3. プレス j を3回(または 3j で3行下にジャンプします。 G (大文字のg)で最終行にジャンプします。
  4. 押す I (大文字のi)で始まる。
  5. で入力します。 vendor_ . 注:画面を更新するのは 最初 行目まで エスケープ が押されると(6.)、すべての行が更新されます。
  6. 押す エスケープ .

大文字 I は小文字ではなく、必ず i というのは、小文字の i の開始と解釈されます。 テキストオブジェクト これは、タグブロック内を選択する場合など、それ自体でかなり有用です ( it ):