Vim が .vimrc を手動でソースした後にのみハイライト設定をアクティブにするのはなぜですか?

Vim が .vimrc を手動でソースした後にのみハイライト設定をアクティブにするのはなぜですか?

私は掃除をしていたvimrc今日は、メンテナンスを容易にするために、別々のファイルに分割しました。これらの変更が完了すると、末尾の空白の強調表示を除いて、すべての構成、マッピング、プラグインが機能しているように見えます。

.vim/rc/appearance.vim に次の行があります:

highlight RedundantSpaces term=standout ctermbg=red guibg=red
match RedundantSpaces /\s\+$\| \+\ze\t/ "\ze sets end of match so only spaces highlighted

私の理解では、最初の行はハイライト グループ 'RedundantSpaces' を作成し、カラー端末の場合、ハイライト グループに一致するテキストの背景を赤にするように vim に指示します。2 行目は、ハイライト グループに一致するテキストを識別するために使用されるパターンを定義します。

vim でファイルを開き、空白行にスペースを入力し始めても、スペースは赤で強調表示されません。 を実行すると:source ~/.vimrc、強調表示されます。

すべての個別のrc/*.vimファイルのソースとなる行を削除し.vimrc、上記の 2RedundantSpaces行を.vimrc直接挿入すると、vim は期待どおりに動作し、末尾の空白が強調表示されます。

ただし、行を sourcing のままにしてrc/*.vimRedundantSpaces行を my の末尾に配置すると.vimrc(つまり、これらのコマンドが vim の呼び出し時に最後に実行される場合)、強調表示はまだ機能しないため、 を実行する必要がありますsource ~/.vimrc

ファイル内の何かがハイライト設定とうまく相互作用していないことは明らかですrc/*.vimが、それが何なのか説明できません。これらのファイルのいずれにも、ハイライト設定と相互作用するものはありません。

ここで何が間違っているのか誰か示唆できますか?

答え1

この問題の原因は賢明なプラグイン:行 93:help t_Co

" Allow color schemes to do bright colors without forcing bold.
if &t_Co == 8 && $TERM !~# '^linux'
  set t_Co=16  " << --- Causes hickup
endif

vimを詳細ログモード( )で実行しvim -V15load_log.vim、検索するt_Co=と、実際に解析されているRedundantSpacesことがわかります。sensibleあなたのappearance.vimファイル。

簡単な修正方法としては、コードのそのセクションをコメントアウトして に追加することです.vimrcが、git リポジトリにリンクしているため、おそらくそれは望んでいることではありません。

別の方法としては、ディレクトリから移動して、別の行bundleとして追加する方法があります。sourcevimrc前にあなたのグロブループ。

つまり:

  source ~/.vim/hacks/vim-sensible/plugin/sensible.vim

  for f in split(glob ...

別の方法としては、BufLoad でカスタムハイライトをロードする方法があります。

などなど…

答え2

NeoBundleを使用している場合はNeoBundleLazy 'tpope/vim-sensible'NeoBundleSourcevimrcの最後に と記述すればうまくいきます。また、https://github.com/tpope/vim-sensible/issues/74

関連情報