ファイルタイプによるVimのインデント動作の変更
-
03-07-2019 - |
質問
ファイルの種類に基づいて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またはオートコマンドを使用してオプションを設定します。
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
長いコマンドまたは設定は、短いバージョンに置き換えることができます。
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
〜/ .vimrcのファイルサフィックスに基づいてautocmdコマンドを入力します
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
探しているコマンドはおそらくts =とsw =です
通常、 expandtab
セットを使用しますが、メイクファイルには適していません。最近追加しました:
: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プラグイン。これにより、vimのインデントサイズを変更できるだけでなく、他の多くのエディターで一貫したコーディングスタイルを維持できます。
以下はシンプルなeditorconfigです。ご覧のとおり、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のインデントを適切に構成できますが、 Vindect は、Pythonファイルを開いたときに関連する設定を自動的に設定します。 Vindectをさらに効果的に使用するには、このヒントを使用してください。他の人がさまざまなインデントスタイル(タブとスペース、スペースの数)で作成したpythonファイルの編集を始めたとき、非常にイライラしていました。ただし、Vindectとこのインデントファイル
また推奨:
autotabというCで作成したユーティリティを使用します。
。ロードしたファイルの最初の数千行を分析し、Vimパラメーター shiftwidth
、 tabstop
および expandtab
の値を決定します。
これは、たとえば gcc -O autotab.c -o autotab
を使用してコンパイルされます。 Vimと統合する手順は、上部のコメントヘッダーにあります。
Autotabはかなり賢いですが、特に異なるインデントスタイルを使用して一貫性を維持していないため、時々混乱する可能性があります。
インデントに明らかにタブ、またはタブとスペースの組み合わせを使用するファイルの場合、Autotabはコメントなどの連続する行にわたる内部要素の配置などの要因を考慮して、使用されているタブサイズを判別します。
さまざまなプログラミング言語で機能し、「帯域外」を許容します。明白な空白行はもちろんのこと、Cプリプロセスディレクティブ、Cステートメントラベルなど、インデントの増分に従わない要素。