web-dev-qa-db-ja.com

vi / Vimの複数行選択の先頭にテキストを挿入するにはどうすればいいですか?

Vim で、選択範囲の各行の先頭に文字を挿入する方法を教えてください。

たとえば、各行の先頭に//を前に付けてコードブロックをコメントアウトしたいとしましょう(私の言語のコメントシステムでは、/* */のようなブロックコメントを許可していないと仮定します)。どのようにこれをしますか?

373
Jordan Parmer
  • 押す Esc コマンドモードに入る
  • つかいます Ctrl+V ビジュアルブロックモードに入る
  • 移動する Up/Downコメントしたい行のテキストの列を選択します。
  • それからヒット Shift+i 挿入したいテキストを入力します。
  • それからヒット Esc1秒待つと、挿入されたテキストが各行に表示されます。

詳しい情報と読み方については、 vim wikiに関するこの関連記事 を調べてください。

655
pixelbeat

これは、各行の先頭を "//"に置き換えます。

:%s!^!//!

これは各選択行(視覚モードを使って選択)の先頭を "//"に置き換えます。

:'<,'>s!^!//!

(通常モードでは)gvは最後の視覚的選択を復元します。これは時々役に立ちます。

168
Tomalak

検索と置換の一般的なパターンは次のとおりです。

:s/search/replace/

現在行の最初の 'search'を 'replace'に置き換えます

:s/search/replace/g

現在行のすべての 'search'を 'replace'に置き換えます。 'g'は 'global'の短縮形です

このコマンドは、現在の行についてのみ、 'search'の各出現箇所を 'replace'に置き換えます。 %はファイル全体を検索するために使用されます。各置き換えを対話的に確認するには、確認のために 'c'を追加します。

:%s/search/replace/c

対話形式でファイル全体の 'search'を 'replace'に置き換えます

%文字の代わりに、行番号の範囲を使用することができます( '^'文字は、行の先頭を表す特別な検索文字です)

:14,20s/^/#/

14〜20行目の先頭に '#'文字を挿入します

別のコメント文字(//など)を使用したい場合は、コマンドの区切り文字を変更してください。

:14,20s!^!//!

14行目から20行目の先頭に '//'文字シーケンスを挿入します

あるいは、//のように常にエスケープすることもできます。

:14,20s/^/\/\//

14行目から20行目の先頭に '//'文字シーケンスを挿入します

エディタに行番号が表示されていない場合は、単に次のように入力してください。

:set nu
76
cyber-monk

初心者にとってより簡単かもしれないもう一つの方法:

 some█
 code
 here

最初の行にカーソルを置きます。によって

:1Enter

次のように入力して挿入モードに入り、テキストを追加します。

I//Space

 // █some
 code
 here

押す Esc コマンドモードに戻って有向グラフを使うには:

j.j.

 // some
 // code
 //█here

j 1行下がるモーションコマンドです。 . 最後に行った編集コマンドを繰り返します。

33
ninegrid

そしてもう一つの方法:

  • 行頭に移動する
  • ビジュアルブロックモードに入ります(CTRL - v
  • 必要な行を選択します(で上下に移動します)。 j/kまたは[line]で行にジャンプするG
  • 押す I (それは首都だ)
  • コメント文字を入力
  • 押す ESC
23
Yewge

これは各行の先頭に#を追加します。

:%s/^/#/

そして、人々はあなたが適切にスクリプトをコメントすることの欠如について不平を言うのをやめるでしょう。

17
Jar-jarhead

あなたがそれについて超空想を得たいならば、あなたの.vimrcにこれを入れてください:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

その後、ビジュアルモードでいつでも\cを押してcブロックを削除し、\uuncommentにすることができます。もちろん、これらのショートカットキーストロークを任意のものに変更できます。

14
Lucas Oman

さらに別の方法:

:'<,'>g/^/norm I//

/^/は、すべての行に一致させるための単なるダミーパターンです。 normを使用すると、その後に続く通常モードのコマンドを実行できます。 I//は、カーソルを行の先頭に移動しながらinsert-modeに入るように指示してから、次のテキスト(2つのスラッシュ)を挿入します。

:gは、複数のモードを切り替えたり、行を削除または追加したり、カーソルを移動したり、たくさんのマクロを実行したりしたい場合など、複数行で複雑な操作を行うのに便利です。それはパターンにマッチします。

9
Brian Carper

コードブロックをコメントするためには、 NERD Commenter プラグインが好きです。

テキストを選択してください:

Shift-V
...select the lines of text you want to comment....

コメント:

,cc

コメント解除:

,cu

あるいは単に行やブロックのコメント状態を切り替えるだけです:

,c<space>
3
Kevin

EnhCommentify プラグインをお勧めします。

例えば。これをあなたのvimrcに置いてください。

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

(選択した)行を '、c'でコメント/コメント解除することができます

2

誰かの複数行選択が実際に段落である場合、手動で行を選択する必要はありません。 vimはあなたのためにそれを行うことができます:

  1. vip:段落全体を選択してマークする
  2. shift-i:行の先頭にテキストを挿入
  3. escape:挿入モードのままにする/通常モードに入る[行頭が選択されたまま]
  4. escape:行の始まりの選択を解除します
1
TheUnseen

コメント対象の領域を視覚的ブロックとしてマークする(<C-V

そしてc#<ESC>pを実行

  1. cを "#"に変更
  2. 元に戻す

頻繁に行う場合は、.vimrcにショートカット(例:\q)を定義してください。

:vmap \q c#<ESC>p
1
JJoao

各行の先頭に "ABC"を挿入するには

1)コマンドモードに入る

2):ABCにおける%norm

0
Mac