web-dev-qa-db-ja.com

ファイルの種類によるVimの字下げ動作の変更

誰かがファイルの種類に基づいてVimの字下げ動作を変更する最も簡単な方法を簡単に説明してもらえますか?たとえば、Pythonファイルを開く場合は2つのスペースでインデントする必要がありますが、Powershellスクリプトを開く場合は4つのスペースを使用する必要があります。

353
EBGreen

Vimが特定のファイルタイプに切り替えるたびに実行される.vimファイルを追加することができます。

たとえば、次の内容のファイル~/.vim/after/ftplugin/html.vimがあります。

setlocal shiftwidth=2
setlocal tabstop=2

これにより、vimはインデントに幅2文字のタブを使うようになります(noexpandtabオプションは私の設定のどこかでグローバルに設定されています)。

これはここで説明されています: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 、ファイルタイププラグインのセクションまでスクロールしてください。

283
SpoonMeiser

オプションを設定するには、ftpluginsまたはautocommandを使用してください。

ftplugin

~/.vim/ftplugin/python.vim:

setlocal shiftwidth=2 softtabstop=2 expandtab

~/.vimrcでそれらをオンにすることを忘れないでください。

filetype plugin indent on

(詳細については:h ftplugin

オートコマンド

~/.vimrc内:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

長いコマンドや設定は短いバージョンのものに置き換えることができます。
autocmdau
setlocalsetl
shiftwidthsw
tabstopts
softtabstopsts
expandtabet

tabstopsofttabstopの違いを学ぶこともお勧めします。多くの人がsofttabstopについて知りません。

156
graywh

~/.vimrcを編集し、インデントごとに異なるファイルタイプを追加します。 html/rbは2つのスペースをインデントし、js/coffeeは4つのスペースをインデントします。

" by default, the indent is 2 spaces. 
set shiftwidth=2
set softtabstop=2
set tabstop=2

" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype Ruby setlocal ts=2 sw=2 expandtab

" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab

参照してください: ファイルタイプによるVimの空白の設定

77

〜/ .vimrcにファイル接尾辞に基づくautocmdコマンドを入れる

autocmd BufRead,BufNewFile   *.c,*.h,*.Java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

探しているコマンドはおそらくts =とsw =です。

58
Paul Tomblin

私は通常expandtab setで作業しますが、それはメイクファイルには良くありません。私は最近追加しました:

:autocmd FileType make set noexpandtab

私の.vimrcファイルの末尾まで、それはMakefile、makefile、および* .mkをmakefileとして認識し、タブを展開しません。おそらく、これを拡張することができます。

23

私はいつも違ったファイルタイプのためにタブのサイズを変えた人々には驚かされます。あなたがlessを使ってファイルを見るとき、あなたは一体何をしていますか?

個人的には、これらの設定を.vimrcで使用します。

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType Ruby set tabstop=8|set shiftwidth=2|set expandtab
14
Nello

これはほとんどの人に知られているかもしれませんが、とにかく(初めて困惑しました)::set et:set expandtabs)を実行しても、ファイルに既に存在するタブは変更されません。:retabを実行する必要があります。例えば:

:set et
:retab

ファイル内のタブは十分なスペースに置き換えられます。タブを元に戻すには:

:set noet
:retab
6
Juan Lanus

今日では、 editorconfig を試すことができます。それには vim plugin もあります。これで、あなたはvimのインデントサイズを変えるだけでなく、他の多くのエディタでも、一貫したコーディングスタイルを保つことができます。

ご覧のとおり、Pythonファイルには4つのインデントスペースがあり、pugテンプレートファイルには2つしかありません。

# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4

# 2 space indentation for pug templates
[*.pug]
indent_size = 2
4
chengbo

Vimのインデントはインデントプラグインを使っても手動でも設定できますが、pythonファイルを開いたときに自動的に適切な設定を行う Vindect というpythonスクリプトを使うことをお勧めします。 Vindectをさらに効果的に使用するには、 このヒント を使用してください。私が最初に他の人が作成したpythonファイルをさまざまな字下げスタイル(タブとスペース、スペース数)で編集し始めたとき、それは信じられないほどイライラしました。しかしVindectと一緒に このインデントファイル

またお勧め:

3
haridsv

私がCで書いたユーティリティ autotab を使います。それはあなたがロードしたファイルの最初の数千行を分析し、Vimパラメータshiftwidthtabstopおよびexpandtabの値を決定します。

これは例えばgcc -O autotab.c -o autotabを使ってコンパイルされます。 Vimと統合するための説明は上部のコメントヘッダにあります。

Autotabはかなり巧妙ですが、時々混乱する可能性があります。特に、異なるインデントスタイルを使用して一貫性が維持されていないためです。

ファイルが明らかにインデントとしてタブ、またはタブとスペースの組み合わせを使用している場合、Autotabはコメントなどの連続した行にわたる内部要素の配置などの要素を考慮することによって、どのタブサイズが使用されているかを判断します。

これはさまざまなプログラミング言語で機能し、Cの前処理指令やCの文ラベルなど、インデントの増分に従わない「アウトオブバンド」要素を許容します。明白な空白行は言うまでもありません。

1
Kaz