誰かがファイルの種類に基づいてVimの字下げ動作を変更する最も簡単な方法を簡単に説明してもらえますか?たとえば、Pythonファイルを開く場合は2つのスペースでインデントする必要がありますが、Powershellスクリプトを開く場合は4つのスペースを使用する必要があります。
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 、ファイルタイププラグインのセクションまでスクロールしてください。
オプションを設定するには、ftpluginsまたはautocommandを使用してください。
~/.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
長いコマンドや設定は短いバージョンのものに置き換えることができます。autocmd
:au
setlocal
:setl
shiftwidth
:sw
tabstop
:ts
softtabstop
:sts
expandtab
:et
tabstop
とsofttabstop
の違いを学ぶこともお勧めします。多くの人がsofttabstop
について知りません。
~/.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の空白の設定
〜/ .vimrcにファイル接尾辞に基づくautocmdコマンドを入れる
autocmd BufRead,BufNewFile *.c,*.h,*.Java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
探しているコマンドはおそらくts =とsw =です。
私は通常expandtab
setで作業しますが、それはメイクファイルには良くありません。私は最近追加しました:
:autocmd FileType make set noexpandtab
私の.vimrcファイルの末尾まで、それはMakefile、makefile、および* .mkをmakefileとして認識し、タブを展開しません。おそらく、これを拡張することができます。
私はいつも違ったファイルタイプのためにタブのサイズを変えた人々には驚かされます。あなたがlessを使ってファイルを見るとき、あなたは一体何をしていますか?
個人的には、これらの設定を.vimrcで使用します。
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType Ruby set tabstop=8|set shiftwidth=2|set expandtab
これはほとんどの人に知られているかもしれませんが、とにかく(初めて困惑しました)::set et
(:set
expandtabs)を実行しても、ファイルに既に存在するタブは変更されません。:retab
を実行する必要があります。例えば:
:set et
:retab
ファイル内のタブは十分なスペースに置き換えられます。タブを元に戻すには:
:set noet
:retab
今日では、 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
Vimのインデントはインデントプラグインを使っても手動でも設定できますが、pythonファイルを開いたときに自動的に適切な設定を行う Vindect というpythonスクリプトを使うことをお勧めします。 Vindectをさらに効果的に使用するには、 このヒント を使用してください。私が最初に他の人が作成したpythonファイルをさまざまな字下げスタイル(タブとスペース、スペース数)で編集し始めたとき、それは信じられないほどイライラしました。しかしVindectと一緒に このインデントファイル
またお勧め:
私がCで書いたユーティリティ autotab
を使います。それはあなたがロードしたファイルの最初の数千行を分析し、Vimパラメータshiftwidth
、tabstop
およびexpandtab
の値を決定します。
これは例えばgcc -O autotab.c -o autotab
を使ってコンパイルされます。 Vimと統合するための説明は上部のコメントヘッダにあります。
Autotabはかなり巧妙ですが、時々混乱する可能性があります。特に、異なるインデントスタイルを使用して一貫性が維持されていないためです。
ファイルが明らかにインデントとしてタブ、またはタブとスペースの組み合わせを使用している場合、Autotabはコメントなどの連続した行にわたる内部要素の配置などの要素を考慮することによって、どのタブサイズが使用されているかを判断します。
これはさまざまなプログラミング言語で機能し、Cの前処理指令やCの文ラベルなど、インデントの増分に従わない「アウトオブバンド」要素を許容します。明白な空白行は言うまでもありません。