タブキー== 4つのスペースとVimの中括弧の後の自動インデント


1265

どのように作るのですかVIを - Vimは同様に(!、タブに悪いをスペースに変換)タブを使用することはありません、中括弧ブロックの後にTabキー== 4つのスペース、および自動インデントのコードを作るEmacsはいますか?

また、これらの設定を保存して、再度入力する必要がないようにする方法を教えてください。

私はこれに関連する他の質問を見ましたが、それはいつも私が望むものから少しずれているようです。


回答:


1882

以下のいくつかの回答で指摘されているように、ここで推奨される方法は、smartindentを使用することではなく、代わりに(.vimrcで)以下を使用することです。

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

あなたの中の.vimrc:ファイル:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

ヘルプファイルに慣れるには少し時間がかかりますが、読むほど、Vimの機能は向上します。

:help smartindent

さらに、移植性のためにソースにこれらの設定を埋め込むことができます。

:help auto-setting

現在の設定を確認するには:

:set all

以下のようgraywhコメントにポイント、smartindentはものの、依然として主にCに似た構文を持つ言語について、その「ワークスより賢く」はcindentに置き換えられました。

:help C-indenting


4
expandtabを設定している場合は、スペースを使用する必要があります。また、「互換性を設定」しますか?これには、expandtabをデフォルトの「オフ」にリセットするなど、さまざまな副作用があります
Ken

60
申し訳ありませんが、smartindentはcindentに置き換えられましたが、それ自体はCスタイルの構文にのみ適しています。vimrcでどちらかをオンにすると、他の言語で作業するときに問題になる場合があります。代わりに「filetype indent on」を使用してください。
graywh 2010

2
まあ、smartindent Cスタイルの構文専用であり、本質的に非推奨です。
graywh 2010

4
expandtabを有効にした場合、とにかく実際にテキストにタブ文字を入力する方法はありますか?
Daniele Segato 2016年

3
@DanieleSegato <CTRL V> <Tab>を挿入モードで動作するはずです:stackoverflow.com/questions/4781070/...
ケン

236

関連して、タブとスペースの両方を使用するファイルを開いた場合、

set expandtab ts=4 sw=4 ai

ファイル全体ですべてのタブをスペースに置き換えることができます

:%retab

10
参考までに、タブをスペースで置き換えたくない場合は、expandtab行を削除してください。
イーノ

6
空白をタブ化していませんか?;-)
ロブ・ウェルズ

11
@ Rob-Wells:「空白」を「空白」に変更しました。今楽しいですか?;-)
netjeff 2014

その最初の行が何を意味するのか説明できますか?
モニカの訴訟に資金を提供

2
expandtabは、タブがスペースに展開されるかどうかを決定します。ts = tabstop =ファイル内の<Tab>がカウントするスペースの数。sw = shiftwidth =(自動)インデントの各ステップで使用するスペースの数。ai = autoindent =新しい行を開始するときに現在の行からインデントをコピーします。
mcmacerson

89

ファイルタイプ固有のインデントを取得する最良の方法filetype plugin indent onは、vimrcで使用することです。次にset sw=4 sts=4 et、たとえば.vim / ftplugin / c.vimのように指定することができます。編集中のすべてのファイルに対してグローバルにする必要はなく、他の非Cタイプの構文正しくインデントされます(lispsでも)


9
私見、正しいとマークされている答えよりも優れています。filetypeインデントは、cindentおよびsmartindentに取って代わります。
2010

62

ほとんどのファイルで4スペースのタブ、Makefileで実際の8幅のタブ文字、C / C ++を含むさまざまなファイルで自動インデントを設定するには、これをファイルに挿入し~/.vimrcます。

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

なぜ必要ないのですelseか?最後の行がすべてのケースでメイクファイル固有のものを上書きするように思えます
lucidbrot

6
こんにちは@lucidbrotの "autocmd FileType make"ステートメントは、Makefileを開くたびに使用する設定をvimに基本的に指示します。その下の行はデフォルトを設定しています。つまり、「tabstop = 8 ...」の設定は後でファイルを開いたときに適用され、初期化時に適用される「tabstop = 4 ...」の設定が上書きされます。
Shervin Emami 2017年

56

Ubuntuなどの多くのLinuxシステムでは、.vimrcファイルはデフォルトでは存在しないため、最初に作成することをお勧めします。

.viminfoホームディレクトリにあるファイルは使用しないでください。別の目的で使用されます。

ステップ1:ホームディレクトリに移動する

cd ~

ステップ2:ファイルを作成する

vim .vimrc

ステップ3:上記の構成を追加する

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

手順3:Shift+ を押してファイルを保存しますZZ


11
使用Shift + ZZしないでください。.swpファイルが作成されます。使用しますwq
シャス

6
@shas:"ZZ"は ":x"と同じです。 ":wq"と同じですが、ファイルが変更された場合にのみ保存されます...(Ctrl-Z別の話です...)
Gert van denバーグ

1
@shasそれは単に真実ではありません。編集セッションのスワップファイルが必要ない場合は、を実行する必要がありますvim -n <file>。スワップファイルは、保存時に生成されるものではありません。スワップファイルは、突然終了した編集セッションの回復に役立つため、その目的はかなり損なわれます。
カズ

32

推奨される方法は、ファイルタイプベースのインデントを使用し、それが十分でない場合のみsmartindentおよびcindentを使用することです。

以下を.vimrcに追加してください

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

それが別の答えとして役立つことを願っています。




6

自動インデントは現在の構文モードに基づいています。Foo.javaを編集している場合、次の行{を入力してEnterインデントすると、

タブに関しては、2つの設定があります。Vim内でコロンを入力し、「set tabstop = 4」と入力すると、タブが4つのスペースとして表示されます。もう一度コロンを押し、「set expandtab」と入力すると、タブのスペースが挿入されます。

これらの設定は、ホームディレクトリの.vimrc(Windowsの場合は_vimrc)に配置できるため、一度入力するだけで済みます。


0

まず、TabVim のキーを手動インデントに使用しないでください。Vimには、インデントの量を手動で増減するための挿入モードのコマンドのペアがあります。これらのコマンドはCtrl-TおよびCtrl-Dです。これらのコマンドはtabstopshiftwidthおよびの値を監視し、expandtabスペースとタブの正しい混合を維持します(タブの最大数とそれに続く必要なスペースの数)。

第二に、自動インデントを使用する場合は、これらの手動インデントキーをあまり使用する必要はありません。

場合Ctrl-Tの代わりに、Tab気になるあなたを、あなたはそれを再マップすることができます:

:imap <Tab> ^T

次のように再マッピングShift-Tabして、Ctrl-D強制解除することもできます。

:imap <S-Tab> ^D

ここで、^ Tおよび^ Dは、として挿入できるリテラル制御文字ですCtrl-VCtrl-T

このマッピングを行っても、を使用してバッファにリテラルTabを入力できますCtrl-VTab:set expandtabオンにしても、これを行うと、展開されていないタブ文字が表示されることに注意してください。

<Tab>マップと同様の効果がを使用して実現さ:set smarttabれます。これにより、行の先頭のバックスペースもスマートに動作します。

ではsmarttab際モード、Tab行の先頭にない使用されている、それは特別な意味を持ちません。これは上記のTabtoのマッピングとは異なりますCtrl-T。なぜなら、Ctrl-T(挿入モードで)行のどこかで使用すると、その行のインデントが増えるからです。

その他の有用なマッピングは次のとおりです。

:map <Tab> >
:map <S-Tab> <

これで、いくつかの行を選択し、ヒットTabしてインデントすることができます。またはTab、コマンドモードで行を2回押して、インデントを増やします。

適切なインデント管理コマンドを使用すると、すべてが3つのパラメーターshiftwidthtabstopと)によって制御されますexpandtab

shiftwidthパラメータは、あなたのインデントのサイズを制御します。4つのスペースインデントが必要な場合は:set shiftwidth=4、またはを使用します:set sw=4

これだけを行うnoexpandtabと、デフォルトでスペースとタブを組み合わせてインデントが作成されます。を使用し:set expandtabます。これにより、バッファーに入力したタブ文字がスペースに展開され、Vim管理のインデントではスペースのみが使用されます。

ときにexpandtabオンになり、そしてあなたがすべて正しいVimのメカニズムを通して、あなたのインデントを管理する場合、の値はtabstop無関係になります。ファイルでタブが発生した場合のタブの表示方法を制御します。あなたが持っている場合はset tabstop=8 expandtab、次に使用してファイルにハードタブをこっそりCtrl-VTab、それはいつものように、次の8列ベースのタブ位置に配置を生成します。


すべてのマッピングで、非再帰的なバリアントを使用する必要があります。goのマッピング<C-t>では、リテラルではなくその構文を使用できます。最後に、<Tab>ノーマルモードでのマッピングもマッピングされます<C-i>(これらは同じ文字です)ので、お勧めしません(vim機能の気の利いた部分を失う
D. Ben Knoble

@ D.BenKnobleこれはお勧めしません。Ctrl-T、Ctrl-D、および<>を自分で使用しています。意図したとおりにVimを使用しています。他のエディターでTabを使用していた人は、それが気に入らないかもしれません、それだけです。
カズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.