vi で複数の行をすばやくインデントする:具体的なコード例と解説
vi で複数の行をすばやくインデントする
vi で複数の行をインデントするには、以下の手順に従います。
範囲を指定する:
- 行番号:
1,5
は 1 行目から 5 行目までの範囲を指定します。 - マーク:
ma
でマークをセットし、mb
で別のマークをセットします。その後、m'b
でmb
のマークまでを範囲として指定します。 - 検索:
/pattern
でパターンを検索し、%
で検索結果のペアの間を指定します。
- 行番号:
インデント:
>>
で現在のインデントを 1 レベル増やす。
例:
- 1 行目から 5 行目を 1 レベルインデントする:
1,5>>
- マーク
a
からマークb
までの範囲を 2 レベルインデントする:m'b>>
- 検索結果のペアの間を 1 レベルデインデントする:
%<<
:indent
コマンドを使用して、特定の行番号やマークの範囲をインデントすることもできます。:set shiftwidth=4
でインデントの幅を 4 スペースに設定できます。:set tabstop=8
でタブ幅を 8 スペースに設定できます。
vi で複数の行をすばやくインデントする:具体的なコード例と解説
行番号を使って範囲を指定し、インデントする
1,5>> " 1行目から5行目を1つインデントする
>>
: 指定した範囲の行を1つインデントします。
ma " 行頭に移動し、'a'マークを設定
mb " インデントしたい最後の行に移動し、'b'マークを設定
m'b>> " 'a'から'b'までの範囲を1つインデントする
ma
,mb
: それぞれ'a', 'b'という名前でマークを設定します。m'b
: 'b'マークまでを範囲として指定します。
/function\> " 'function'という単語の先頭を探します
%<< " 検索結果のペアの間を1つデインデントします
/function\>
: 'function'という単語の先頭を探します。%
: 検索結果のペアの間を指定します。
ビジュアルモードを使って範囲を選択し、インデントする
Vjj " ビジュアルラインモードで3行を選択
>> " 選択した範囲を1つインデントする
V
: ビジュアルラインモードに入ります。jj
: 下方向に2行移動し、3行を選択します。
- 特定の行数だけインデントする:
1,5+2>> " 1行目から7行目までを1つインデdentする
- インデントのレベルを複数変える:
1,5>>> " 1行目から5行目を3つインデントする
- インデントの幅を変更する:
:set shiftwidth=4 " インデントの幅を4スペースにする
- タブとスペースの混在:
:set expandtab
でタブをスペースに展開できます。
>>
はインデントを増やし、<<
はインデントを減らします。- ビジュアルモードでは、
V
で行単位、v
で文字単位、Ctrl-v
でブロック単位で選択できます。 - インデントの自動整形には、
=
コマンドやインデントプラグインが便利です。
vi で複数の行をインデントする方法は、範囲の指定方法によって様々です。行番号、マーク、検索パターン、ビジュアルモードなど、状況に合わせて使い分けることで、効率的にコードの整形を行うことができます。
:help indent
:help marks
:help visual
ビジュアルモードの活用
- 行単位:
V
でビジュアルラインモードに入り、j
やk
で範囲を選択後、>
や<
でインデントします。
マクロの記録と再生
複雑なインデント操作を繰り返す場合、マクロを記録して再生することで効率化できます。
qa " マクロの記録開始(レジスタa)
Vjj " 3行を選択
>> " インデント
q " マクロの記録終了
10@a " マクロaを10回繰り返す
インデントプラグインの利用
vim には、インデントを自動調整したり、より高度なインデント操作を可能にする様々なプラグインが存在します。代表的なプラグインとしては、indent-rainbow
(インデントレベルを色で表示)、vim-indent-guides
(インデントガイドを表示)、vim-easy-align
(コードの整列) などがあります。
外部ツールとの連携
- indent: 外部のインデントツール (indent, astyle など) を利用して、vim からファイルを一時的に保存し、外部ツールで整形してから再度読み込む方法です。
:global コマンド
特定の条件に合う行に対して一括でインデント操作を行うことができます。
:g/function/>> " function という単語が含まれる行をすべてインデント
正規表現を利用した置換
正規表現を用いて、インデントを表現する文字列を置換することで、インデントを変更することができます。
:%s/^ *// " 行頭のスペースを削除
vi で複数の行をインデントする方法は、非常に多岐にわたります。状況や好みに合わせて、最適な方法を選択することで、効率的にコーディングを進めることができます。
具体的な状況に合わせて、以下の点を考慮して方法を選ぶと良いでしょう。
- インデントしたい行数: 少数行であればビジュアルモード、多数行であればマクロやプラグインが便利です。
- インデントの複雑さ: 単純なインデントであれば
>>
や<
で十分ですが、複雑な場合は正規表現やプラグインが有効です。 - コードの形式: 言語やコーディングスタイルによって、適切なインデント方法が異なります。
様々な方法を試して、ご自身に合った方法を見つけてください。
:help indent
:help visual
:help macro
:help :global
vim editor indentation