3

環境

私は.vimrc自動的に次のものを調達しています:

autocmd! BufWritePost ~/.vimrc ソース ~/.vimrc

間隔のデフォルトも設定します。

tabstop=2 を設定します softtabstop=2 shiftwidth=2 expandtab

後で、FileTypeイベントを使用して、上記の間隔のデフォルトをファイルタイプ固有の間隔でオーバーライドします。

" Syntax of these languages is fussy over tabs & spaces¬
autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab¬
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab¬                                                   

" Customisations based on house-style (arbitrary)
autocmd FileType sh setlocal ts=4 sts=4 sw=4 expandtab
autocmd FileType vim setlocal ts=4 sts=4 sw=4 expandtab

問題

私が抱えている問題は、ソース.vimrcがデフォルト値を設定するが、FileTypeイベントをトリガーしないことです。これは、ファイルタイプ固有のスペースを使用してファイルを編集しているときに:writeto my.vimrc を実行すると、ファイルタイプ固有のスペースがデフォルトで上書きされることを意味します!

更新: Ingo が指摘したように、この問題は.vimrc他のファイルでのみ発生し、発生しません。

例として、私が自分の で作業しているとき、.vimrc最初はファイル固有のスペース(イベントは my への書き込みによってトリガーされませんでした)デフォルトの間隔が残っています!ts=4 sts=4 sw=4 expandtab.vimrctabstop=2 softtabstop=2 shiftwidth=2 expandtabFileType.vimrc

私の質問

デフォルトの間隔をファイルタイプ固有の間隔で上書きし、自動ソースの場合でもこれらを保持するにはどうすればよい.vimrcですか?

可能であれば、autocmd を削除せずにこれを達成したいと考えています。それは可能ですか?

私の予感は、ソーシング時に FileType イベントを手動でトリガーする必要があるということ.vimrcです。これを行うことはできますか?

4

3 に答える 3

2

問題を非常に明確に説明しましたが、これが起こっているとは思えません。

:setlocalファイルタイプ固有の設定に正しく使用し:setているため、後者のソースはグローバルデフォルト(およびイベント中の~/.vimrc現在のバッファ)にのみ影響します。他のバッファに影響を与えるには、..vimrcBufWritePost:bufdo.vimrc

これは次の方法で確認できます

:verbose set ts? sts? sw? et?

設定がグローバル設定で上書きされるのを避けるために、.vimrcこれを追加できます。

if expand('%:t') ==# '.vimrc'
    setlocal filetype=vim
endif
于 2014-08-19T07:15:28.550 に答える
0

:bufdo eそれを行いますが、それを自分の.vimrc. また、あまり良くない構文の強調表示も削除されます。

:h bufdoバッファリストの各バッファでコマンドを実行します

:h :e現在のファイルを再編集する

于 2014-08-19T04:02:35.213 に答える