それは些細なことであり、それは助けになるかもしれませんが、私はそれをナビゲートする方法を理解することができません。 viで複数行を素早くインデントするにはどうすればいいですか?
使用 > コマンド。 5行インデントするには 5>>。行ブロックをマークしてインデントするには、 Vjj> 3行インデントする(vimのみ)中括弧ブロックをインデントするには、カーソルをいずれかの中括弧の上に置いて、 >% またはブロック内のどこからでも >iB。
テキストのブロックをコピーしていて、ブロックのインデントを新しい場所に配置する必要がある場合は、 ]p ただの代わりに p。これにより、貼り付けられたブロックが周囲のテキストと揃えられます。
また、 shiftwidth
設定を使用すると、インデントするスペース数を制御できます。
この回答はこの質問の他の回答とコメントを要約し、 Vimのドキュメント と Vim wiki に基づく追加情報を追加します。簡潔にするために、この答えはViとVim特有のコマンドを区別しません。
以下のコマンドで、 "re-indent"は "あなたの インデント設定に従って行をインデントする "を意味します。 shiftwidth
は字下げを制御する主変数です。
一般的なコマンド
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
{
を}
またはB
に置き換えることができます。 =iB
は有効なブロックインデントコマンドです。 "コードブロックをインデントする" これらのコマンドを試してみるための良い例を見てください。
また、覚えている
. Repeat last command
そのため、インデントコマンドは簡単かつ便利に繰り返すことができます。
完全ファイルの再インデント
別の一般的な状況では、ソースファイル全体でインデントを修正する必要があります。
gg=G Re-indent entire buffer
このアイデアを複数のファイルに拡張することができます。
" Re-indent all your c source code:
:args *.c
:argdo normal gg=G
:wall
または複数のバッファ:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
ビジュアルモード
Vjj> Visually mark and then indent 3 lines
挿入モード
これらのコマンドは現在の行に適用されます。
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Exコマンド
カーソルを動かさずに特定の範囲の行を字下げしたいときに便利です。
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
マーカーを使用したインデント
もう一つのアプローチは marker :です。
ma Mark top of block to indent as marker 'a'
...カーソルを終了位置に移動
>'a Indent from marker 'a' to current location
字下げを管理する変数
あなたは .vimrcファイル でこれらを設定することができます。
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
Vimはファイルタイプに基づくインテリジェントなインデントを持っています。これをあなたの.vimrcに追加してみてください。
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
参考文献
大きな選択は次のようになります。
gg=G
それは本当に速いです、そしてすべてがインデントされます;-)
C字下げ indentationでも試してみてください。詳細は:help =
をご覧ください。
={
現在のコードブロックが自動的にインデントされます。
あるいは単に:
==
現在行を自動インデントします。
より視覚的な人々のためのキープレス:
コマンドモードに入ります。
Escape
インデントするには、領域の先頭に移動します。
hjkl↑↓←→
ブロックを開始します。
v
インデントするには、領域の最後まで移動します。
hjkl↑↓←→
(オプション)必要なインデントレベルの数を入力します
0..9
ブロックに字下げを実行します。
>
すでに与えられて受け入れられている答えに加えて、マーカーを配置してから現在のカーソルからマーカーまでのすべてをインデントすることも可能です。したがって、インデントされたブロックの先頭にする場所にma
を入力し、必要なところまでカーソルを移動して>'a
と入力します(有効なマーカー名の代わりに「a
」を使用できます)。これは5>>
やvjjj>
より時々簡単です。
すべてのコマンドのマスターはgg=G
これはファイル全体をインデントします。
そして以下はVimやgVimで素早く行をインデントするために使われるシンプルで洗練されたコマンドのいくつかです。
現在行を字下げする==
現在の行より下のすべての行を字下げする
=G
現在行の下のn
行を字下げする
n==
たとえば、現在の行の下の4行をインデントするには
4==
コードブロックをインデントするには、中括弧の1つに移動してコマンドを使用します。
=%
これらは、複数行をインデントするための最も簡単で強力なコマンドです。
テキストの先頭に行く
提供された解決策と同様に、私は>}
を使って一度に一段落で物事をやりたいです。
ブロックを選んで使うとき > インデントするには、インデントしてから通常モードに戻ります。私の.vimrcファイルにこれがあります。
vnoremap < <gv
vnoremap > >gv
それはあなたがあなたが望むだけの時間あなたの選択をインデントすることを可能にします。
コードをインデントするために2つのスペースを使用するとします。タイプ:
:set shiftwidth=2
その後:
あなたはアイデアを得ます。
(空の行はインデントされません。これはいい感じです))
ブロックをインデントするための答えは(g)vimのドキュメントにあります。
:help visual-block
/indent
コマンドにカウントを付けたい場合は、演算子文字 "v {move-around} 3>"をタイプする直前にこれをしてください(3行目のインデントを右に移動)。
VimのUIの長所は一貫しているということです。編集コマンドは、コマンドとカーソル移動で構成されています。カーソルの動きは常に同じです。
だから、vimを使うためには、カーソルを動かして、例えば、のようなコマンドのレパートリーを覚えることを学ぶ必要があります。 > インデントする(そして < 「アウトデント」へ).
したがって、カーソル位置から画面上部までの行をインデントするには、次のようにします。 >H、 >G ファイルの末尾までインデントします。
入力する代わりに >H、あなたがタイプ dH それからあなたは同じ行ブロックを削除しています、 cH 交換用など.
一部のカーソル移動は特定のコマンドに適しています。特に、 % commandは、HTMLまたはXMLブロック全体をインデントするのに便利です。
ファイルの構文が強調表示されている場合(:syn on
)、カーソルをタグのテキストに設定し(<div>の "i"などに)、次のように入力します。 >% 最後の</div>タグまでインデントします。
これがvimのしくみです。カーソルの動きとコマンドだけを覚えていて、それらをどのように混在させるのかということです。
それで、この質問に対する私の答えは、「あなたがインデントしたい行ブロックの片端に行き、そして > commandとブロックのもう一方の端への移動 "if indentは行をシフトするように解釈されます。 = if indentはプリティプリントのように解釈されます。
これを行う
$vi .vimrc
そしてこの行を追加
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
これはcppファイルのためだけのもので、ファイルタイプを変更するだけで他のファイルタイプのためにこれを行うことができます...
VISUAL MODE
を使用してこれを行う簡単な方法は、コードブロックをコメント化するのと同じプロセスを使用します。
これはshiftwidth
を変更したくない場合やset
指令を使用したくない場合に便利で、TABSやSPACES、その他の文字を扱うのに十分な柔軟性があります。
-- VISUAL MODE --
に切り替えるにはv:
を入力します。3つの先行スペースで置き換える
:'<,'>s/^/ /g
または先頭のタブに置き換える:
:'<,'>s/^/\t/g
簡単な説明
'<,'>
- 視覚的に選択された範囲内
s/^/ /g
- 全範囲の各行の先頭にスペースを3つ挿入する
(または)
s/^/\t/g
- 範囲内の各行の先頭にTab
を挿入
現在の行から次の段落までインデントする>}
または>{
<}
または<{
と同じ未インデント
まだ言及されていないもう1つの方法があります - norm i
コマンドを使用して行の先頭に特定のテキストを挿入することができます。 2〜10行目の前に10個のスペースを挿入するには、次のようにします。
:2,10norm 10i
コマンドの最後には空白文字が必要です - これが挿入したい文字になります。他のテキストで行をインデントすることもできます。たとえば、ファイル内のすべての行を5つのアンダースコア文字でインデントすることができます。
:%norm 5i_
それとも、もっともっと気の利いたもの:
:%norm 2i[ ]
より実用的な例は、#文字を使ってBash/Python/etcコードをコメント化することです。
:1,20norm i#
再インデントする x の代わりに i。たとえば、すべての行から最初の5文字を削除するには、次のようにします。
:%norm 5x
テキストにインデントを付けるのが好きです。
シモンズ:あなたが使用することができます:あなたが行、数字、または%を使用するかもしれない任意の操作(d、y、s ///など)の範囲をマークするために 'a、' zテクニック
私はコメントで私が使う方法を見つけることができなかったので、私はそれを共有するつもりです(私はvimだけだと思います):
これはvimrcでident/tab設定を変更したくない場合や、編集中に変更するためにそれらを覚えておきたい場合に便利です。
思わず私は同じものを使います ctrl - v ブロック選択でスペースを選択して削除 d。
5==
は現在のカーソル位置から5行インデントします。そのため、==
の前に任意の数を入力できます。行数をインデントします。これはコマンドモードです。
gg=G
はファイル全体を上から下にインデントします。
私にとっては、MacVim(ビジュアル)の解決策は、マウスで選択して ">"を押したが、タブの代わりにスペースが好きなので "〜/ .vimrc"に次の行を入れた後:
set expandtab
set tabstop=2
set shiftwidth=2
また、コマンドライン(Terminal.app)からMacVimを呼び出すことができると便利です。そのため、次のようなヘルパーディレクトリ "〜/ bin"があり、そこに "macvim"というスクリプトを置きます。
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
そしてもちろん "〜/ .bashrc"には:
export PATH=$PATH:$HOME/bin
Macportsは "〜/ .profile"と混同することが多いので、PATH環境変数はかなり長くなる可能性があります。
私はなぜこのような単純な答えを見つけるのがそれほど難しいのか知りません….
私自身、これを知るためにはとても苦労しなければなりませんでした。
ホームディレクトリの下の.vimrc
ファイルを編集し、この行を追加します。
set cindent
適切にインデントしたい場所
通常/コマンドモードの場合
10== (this will indent 10 lines from the current cursor location )
gg=G (complete file will be properly indented)
:help left
ex mode
では、:left
または:le
を使って、指定した量だけ行を揃えることができます。具体的には、:left
は [range]内の行を左揃えにします。行のインデントを[indent](デフォルト0)に設定します。
:%le3
または:%le 3
または:%left3
または:%left 3
は、3つのスペースで埋め込むことによってファイル全体を位置合わせします。
:5,7 le 3
は5行目から7行目を3つのスペースで埋めて整列させます。
値が指定されていない:le
または:le 0
は、0のパディングで左揃えになります。
これはvim
とgvim
で動作します。
私はPythonを頻繁に使用しているため、自分でブロックを1インデント以上ずらすことが頻繁に必要であることに気付きました。これを行うには、任意のブロック選択方法を使用してから、>
の直前にジャンプしたいインデントの数を入力します。
例えば。 V5j3>
は5行を3回インデントします - インデントに4つのスペースを使うと12スペースになります
ファイルタイプのすべての行を字下げするには、 esc G = gg
:line_num_start,line_num_end>
例えば.
14,21> shifts line number 14 to 21 to one tab
より多くのタブのために '>'シンボルを増やしてください
例えば.
14,21>>> for 3 tabs
オプション1:ビジュアルブロックモードでviのコードブロックを3つのスペースにインデントする
インデントしたいコードブロックを選択します。これを使って Ctrl+V 通常モードで、下向き矢印を押してテキストを選択します。それが選択されている間に、選択されたテキストのブロックにコマンドを与えるために:
を入力してください。
次がコマンドラインに表示されます。:'<,'>
インデントを3つのスペースに設定するには、le 3
を入力してEnterを押します。これは現われるものです::'<,'>le 3
選択したテキストはすぐに3つのスペースに字下げされます。
オプション2:ビジュアルラインモードでviのコードブロックを3つのスペースにインデントする
通常モードに入って、次のキーを押します。
Vjjjj:le 3
あなたがしたことの解釈:
V
はテキストの選択を開始することを意味します。
jjjj
は4行下向きの矢印で、4行を強調表示しています。
:
は、強調表示されたテキストに対する指示を入力することをviに指示します。
le 3
は、ハイライト表示されたテキストを3行インデントすることを意味します。
選択されたコードはすぐに3スペースインデントまで増減します。
オプション3:インデントを増やすためにビジュアルブロックモードと特別な挿入モードを使用する
通常モードに入って、次のキーを押します。
Ctrl+V
jjjj
(スペースキーを5回押す)
EscShift+i
強調表示されたテキストはすべて、さらに5つのスペースで字下げされています。
ブロックモードの視覚的選択を使用します。
これはユニタスカーではありません。できます:
すべてのファイルを4でインデントするには:
esc 4G=G
コードブロック{}の場合: = + %
選択行の場合 Shift + v 上下矢印キーを使用して選択し、を押します =。
ファイル全体の場合 gg + = + G
注:'gg'は1行目に移動することを意味し、 '='はインデントコマンドで、 'G'はカーソルをファイルの末尾に移動します。
|
がVimのカーソルの位置を表すとします。字下げするテキストが次のようなコードブロックで囲まれているとします。
int main() {
line1
line2|
line3
}
>i{
は " (i
)block(>
) の内側のインデント({
) - /"を意味します。
int main() {
line1
line2|
line3
}
次のように、行が連続しているがブロックの外側にあるとします。
do
line2|
line3
line4
done
2行目から4行目をインデントするには、行を視覚的に選択して>
と入力します。あるいはもっと速くするために>2j
を実行することができます。
do
line2|
line3
line4
done
>Nj
は現在の行から下のN
行までのインデントを意味することに注意してください。字下げする行数が多い場合、ユーザーが適切な値のN
を数えるのに数秒かかることがあります。貴重な時間を節約するために、 相対番号 のオプションをset relativenumber
(Vimバージョン7.3以降で利用可能)で有効にすることができます。