カーソル線セット付きのSpecialKey前景色


8

ではこのQ&A、のためのハイライトグループが存在することが観察さだCursorLineNrときカーソル行の行番号に適用され、set cursorlineオンになっているが。

カーソルラインを使用すると、別のハイライトグループの色も変わることに気づきましたSpecialKey

 set list listchars=tab:\|_,trail:-

私にとってのこの問題は、暗い背景(したがって、暗いカーソルライン)を使用していることです。私の通常のSpecialKey設定も非常に暗いので、listcharシンボルはわずかにしか見えません。しかし、cursorline それらを使用すると白になり、trailcharが実際にヒットしたことと区別がつかなくなり-ます。トレイル文字は、行の終わりにスペースを入力するたびに使用されるため、これは小さな問題ではありません。通常、最初から最後まで行を入力するには、作業中にダッシュのタイプミスと簡単に区別できるいくつかのスペースが必要です(または、ダッシュを意図した場合はスペースのタイプミス)。

他のハイライトグループは影響を受けていないようなので、などCursorLineNrが適用されていると思われますが、hiリストを見ると適切なものは何もありません。

これが何か知っている人はいますか?さらに良いことに、カーソル線のハイライトグループを変更する方法を知っている人はいますか?


2
2行以上ジャンプした後、カーソル行を短時間だけ強調表示します。テキストを編集しているとき、カーソルラインがオフになっています。その振る舞いに慣れることができれば、問題を軽減できるでしょう。
joeytwiddle 2016年

回答:


8

私は長い間、その振る舞いと格闘してきました。

基本的SpecialKeyに、現在の行の前景色は次のNormal場合の前景色に変更されます。

  • cursorlineオプションが有効になっています、
  • CursorLineハイライトグループは、背景色が設定されています。

何を試しても、その動作を修正することはできませんでした。問題はVimのソースコードのどこかにあります。


1
それは私が望んでいた答えではありません!私は自分のトレイル文字を~少し紛らわしくないものに変更しました(使用するあいまいなunicode文字も探す可能性があります)。
goldilocks 2016年

CursorLineグループの背景色がなくても、この動作が見られました。私はそれを無効にしようとし(つまりnone)、デフォルト値(下線が引かれていました)のままにしようとしましたが、スペースは前景色を変更しました
user907860

2

私のために働いたのは、.vimrcIgor Mikushkinの回答に基づく)私の次の行です。

autocmd BufNewFile,BufRead * call matchadd('SpecialKey', '\s\+')
autocmd BufNewFile,BufRead * call matchadd('NonText', '\n\+')

VimEnter開いた最初のファイルに対してのみ機能し、後で開いたファイル/タブに対しては機能しません。BufNewFile,BufReadこれまでに、私が開いたすべてのバッファーに対して機能しました。

最初の行は空白文字をカバーしています。VimはSpecialKeyグループ内でそれらを強調表示するため、それらのスタイルを適用します。

2行目は改行をカバーしています。VimはNonTextグループ内でそれらを強調表示するため、それらのスタイルを適用します。NonText文字が強調表示されていない場合にのみ、2行目が本当に必要SpecialKeyです。


これが答えになるはずです。
hozza

1

.vimrcの次の行で問題が解決しました。

au VimEnter * call matchadd('SpecialKey', '^\s\+', -1)
au VimEnter * call matchadd('SpecialKey', '\s\+$', -1)

これは、カーソル行内のタブおよび後続スペース用の他のスタイルアプリケーションをオーバーライドします。


matchadd()使用しない場合、なぜ結果を変数に格納するのですか?
クリスチャンブラバンド2017

@ChristianBrabandtありがとう、これは修正されました。
イゴールミクシキン2017

これは、NeoVimを使用する私にとっても機能します。
hakunin

0

さらに別の「解決策」があり、実際にはこの問題に対する一種のクラッジです。

「listchars」などのカスタム構文グループがあります。

このような:

hi WhiteSpaceChar ctermfg=251 guifg=#999999
call matchadd("WhiteSpaceChar", "[ \t]")

あなたはこのようなことをすることができました(私はそれをテストしませんでしたが):

hi TrailChar ctermfg=251 guifg=#999999
" the \v in the regex is Vim's flag to use Perl-like regex syntax
call matchadd("TrailChar", "\v +$")

ただし、このアプローチには少なくとも2つの問題があります。

  1. ウィンドウを分割したり、新しいタブを作成したりすると、次のように現在のウィンドウでハイライトが壊れます。

新しいウィンドウが開いたときに、空白の強調表示が壊れる

これを修正するために、私は次のような特別な機能を持っています:

fun! ResetHiglightJS()
  set syntax=javascript
  "these are for the IndentLine plugin
  "IndentLinesDisable
  "IndentLinesEnable
endfun

頻繁に使用する構文グループごとに、強調表示を手動で修正します。これは、オートコマンドや構文オプションの値を手動で設定するなど、別の方法で行うことができます。構文のリセットを機能させるには、これも必要です。

call matchadd("WhiteSpaceChar", "[ \t]")

対応する構文ファイルごとに、 ~/.vim/after/syntax/javascript.vim

  1. このアプローチは、少なくとも1つのプラグイン(IndentLineプラグイン)では正常に機能しません。そのためlet g:indentLine_newVersion = 0、プラグインが正常に機能する手動で設定することにより、古いバージョンに固執する必要がありました。

しかし、他の方法では、このアプローチはIndentLineプラグインがなくても正常に機能します。

空白行は、カーソル行に必要な色があります

そしてそれで受け入れられる:

カーソル行のindentLine色

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.