Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'cursorline' でハイライトされた部分の 'listchars' などの色がおかしい #67

Closed
thinca opened this issue Oct 5, 2011 · 38 comments

Comments

@thinca
Copy link
Member

thinca commented Oct 5, 2011

'cursorline' でハイライトされた部分にある 'listchars' の文字の色がおかしくなります。
1つ外側のハイライトの色になる感じです。例えば、コメント内ならコメントの色に、文字列内なら文字列の色になります。

@thinca
Copy link
Member Author

thinca commented Oct 5, 2011

画像が必要そうなら後で貼ります。今はちょっと無理なので…。

@mattn
Copy link
Member

mattn commented Apr 18, 2012

これ画像お願いします。

@thinca
Copy link
Member Author

thinca commented Apr 18, 2012

真ん中の行だけ行頭の ^ の色がコメントのものに変わっています。
この例はコメントですが、コメントに限らず発生します。

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

使っていて気になってるので私も画像をペタリ

issue67

環境は 7.3.905 x64 +kaoriya (windows7 x64)
下記が1段目の設定値です。

:hi CursorLine
CursorLine     xxx term=underline cterm=underline guibg=#293739

:hi CursorColumn
ColorColumn    xxx term=reverse ctermbg=4 guibg=#232526

:echo &listchars
eol:$,tab:>-,extends:>,precedes:<,trail:~  

:set cursorline cursorcolumn

2段目は1段目から hi clear CursorLine したもの
3段目は2段目から hi CursorLine gui=underline したもの

cursorline では起こるが cursorcolumn は大丈夫なようです
まぁ、実装時期も実装処理も違うでしょうし参考にはならなそうですが

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

cursorline は visual mode と大体似た処理を通してる様でそっちでも同様に listchars の色がおかしくなります

大胆に条件式を削ったら tab, trail, precedes を正常に表示出来ました
extends は元から問題無しで、nbsp は cursorline では大丈夫だけど visual mode では駄目:sweat:
eol も出そうとしたら eol の後は元に戻す的な処理に入っちゃったりヨーワカラン:persevere:
(eol 以降の空白部分がハイライトされなくなっちゃった)


追記:でかいし邪魔なんでpatchは https://gist.github.com/DeaR/5467343 に移動

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

https://gist.github.com/DeaR/5467343

なんか一通りの listchars が正常表示できるようになった気がします。
結局の所 nbsp 以外はどれも attr_prio を無視するようにしただけです。
nbsp は area_attrsearch_attr を無視。


但し、わざわざ条件になっていたものを無視するようにしたので何が起こるやら。

@ynkdir
Copy link
Member

ynkdir commented Apr 26, 2013

cursorline 以外にも hlsearch や :match でも同じみたいです。
hlsearch で /\t を検索した図。

foo

DeaR さんのパッチは hlsearch, :match も直ります。

副作用は…どうなんでしょうね…

@ynkdir
Copy link
Member

ynkdir commented Apr 26, 2013

fg が反映されなくなりますね。
例えば
:hi CursorLine guifg=blue
:hi Search guifg=blue

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

fg が反映されなくなりますね。
例えば
:hi CursorLine guifg=blue
:hi Search guifg=blue

まぁ、searchだろうが、何だろうがNonTextやSpecialKeyで上書き合成しますからねぇ
なので、同時に下記のように設定すれば青くはなりますね

:hi clear SpecialKey
:hi clear NonText
:hi SpecialKey gui=underline
:hi NonText gui=underline

ただ、個人的には、ですが所詮非表示文字なんで本来の文字と区別がつく別の色に常になっていた方が良いような気はします

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

導き出される弊害

  • SpecialKey でbg,fg両方を設定するとSearch・CursorLineから完全に上書きされてしまい見えない

付属のcolorsは大丈夫だが、配布されている物にはそういう設定もあるだろう


余談だが上記の現象は全角スペースの表示としてよく紹介されている下記の様なのでも起きてしまう

:hi QuadSpace guifg=blue gui=underline
:match QuadSpace / /

@ynkdir
Copy link
Member

ynkdir commented Apr 26, 2013

表示系は難しいですね…

パッチなし

:hi clear SpecialKey
a

:hi SpecialKey guifg=blue guibg=NONE
c

:hi SpecialKey guifg=NONE guibg=green
e

:hi SpecialKey guifg=blue guibg=green
g

パッチあり

:hi clear SpecialKey
b

:hi SpecialKey guifg=blue guibg=NONE
d

:hi SpecialKey guifg=NONE guibg=green
f

:hi SpecialKey guifg=blue guibg=green
h

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

これはひどい
またscreen.cにダイブしてきます λ....

@DeaR
Copy link
Member

DeaR commented Apr 26, 2013

何となく弄ってみてる限りでは適用順が、
Syntax→CursorLine→SpecialKeyの順だからCursorLineがある時はSpecialKeyの適用を止めてたのかな。
で、私のパッチは無理やりSpecialKeyを表示するから滅茶苦茶になってる。

https://gist.github.com/DeaR/5467343/9a217fd68fe600ed724d82abba960378c8f4ea9b

:hi clear SpecialKey
:hi SpecialKey guifg=NONE guibg=green

これらもカーソル行以外の表示は良い感じになった
カーソル行の表示は相変わらず

そして、Syntax→SpecialKey→CursorLineな適用順になれば一番気持ちいい表示になりそうだが
どの辺をどの辺に移動すればいいのやら:weary:

気長にTry&Errorするしかないか…:sob:

@ynkdir
Copy link
Member

ynkdir commented Apr 27, 2013

。。。お疲れさまです

@DeaR
Copy link
Member

DeaR commented Apr 27, 2013

https://gist.github.com/DeaR/5467343/75b6da51451d7a6057fb5aea338ae02c0ed72b92
取り敢えず修正。
相変わらずCursorLine等よりSpecialKeyが優先な事には変わりなく、またゴッソリとブロックを移動させたので色々危ない

@ynkdir
Copy link
Member

ynkdir commented Apr 27, 2013

nice!

@DeaR
Copy link
Member

DeaR commented Apr 28, 2013

https://gist.github.com/DeaR/5467343/195c2abb27dcf1af32aa087aa848b900bbb754c8
良い感じになったような気がします

Syntax→CursorLine→SpecialKeyの順だからCursorLineがある時はSpecialKeyの適用を止めてたのかな。

ではなく、まずCursorLineを適用し、SyntaxがあればSyntaxに現在の物をmergeする(逆方向)だったみたいなので、
同様にCursorLineを適用し、SpecialKeyに現在の物をmergeし、Syntaxは無視する、的な感じにしてみました
結果的には Syntax<SpecialKey<CursorLine という優先順に出来た
故にdelekのようにVisualでbg,fg両方指定してある場合、今と同様SpecialKeyとTextと区別がつかなくなります:yum:

@DeaR
Copy link
Member

DeaR commented Apr 28, 2013

:set list listchars=eol:$,trail:~,nbsp:%

:set list listchars=eol:$,tab:>-,trail:~,nbsp:%
:hi clear SpecialKey
clear
:hi SpecialKey guifg=blue guibg=NONE
fg
:hi SpecialKey guifg=NONE guibg=green
bg
:hi SpecialKey guifg=blue guibg=green
bgfg


https://gist.github.com/DeaR/5467343/75b6da51451d7a6057fb5aea338ae02c0ed72b92
なら CursorLine<SpecialKey
https://gist.github.com/DeaR/5467343/195c2abb27dcf1af32aa087aa848b900bbb754c8
なら SpecialKey<CursorLine

微妙に好みの範囲ともいえる


追記
あ、IndentLine残ってる:scream:

@DeaR
Copy link
Member

DeaR commented Apr 28, 2013

適当に比較画像作成

issue67

:colorscheme delek
:set cursorline list listchars=eol:$,tab:>-,trail:~,nbsp:%

SpecialKey overrides CursorLine
-> https://gist.github.com/DeaR/5467343/75b6da51451d7a6057fb5aea338ae02c0ed72b92

CursorLine overrides SpecialKey
-> https://gist.github.com/DeaR/5467343/195c2abb27dcf1af32aa087aa848b900bbb754c8


並べて見ると個人的には一番右

@ynkdir
Copy link
Member

ynkdir commented Apr 28, 2013

おつかれさまです!
私も一番右がいいと思います。

@mattn
Copy link
Member

mattn commented Apr 30, 2013

おーすばらしい。
たぶん一番右がよいと思いますが、どっちも投げてみてはどうでしょう。

@thinca
Copy link
Member Author

thinca commented Apr 30, 2013

私も一番右がいいと思います!

@DeaR
Copy link
Member

DeaR commented Apr 30, 2013

https://groups.google.com/d/topic/vim_dev/oYeTcHINrrg/discussion
投稿しました


GingerとGoogle翻訳の力だけで説明できる気がしないので画像まで添付:sweat_smile:

@ynkdir
Copy link
Member

ynkdir commented Apr 30, 2013

gj!

@DeaR
Copy link
Member

DeaR commented May 2, 2013

バグ発見

:set list listchars=eol:$ conceallevel=1 concealcursor=nvic
:syntax match NonText / / conceal cchar=.

で行末がスペースだとeolやcursorline色々表示されない
探ってきます λ....

@DeaR
Copy link
Member

DeaR commented May 2, 2013

修正完了

  • ConcealCharもSpecialKeyと同じ感じに書くようになった(SpecialKeyと同じようにCursorLineを上書きしたりされたり)
  • char_attr に代入する処理だけを移動することによりパッチがスリムになった

SpecialKey overrides CursorLine version 2

-> https://gist.github.com/DeaR/5467343/94c70662b9825c925d16cfe547a603570e351bd2#file-cursorline_overrides_specialkey_ver2-patch

-> https://gist.github.com/DeaR/5467343/0d98302d85d02b6c8a196ce31fbf0037bb38fc7b#file-specialkey_overrides_cursorline_ver2-patch

CursorLine overrides SpecialKey version 2

-> https://gist.github.com/DeaR/5467343/94c70662b9825c925d16cfe547a603570e351bd2#file-specialkey_overrides_cursorline_ver2-patch

https://gist.github.com/DeaR/5467343/0d98302d85d02b6c8a196ce31fbf0037bb38fc7b#file-cursorline_overrides_specialkey_ver2-patch


なんかファイル名左の×押しても空の登録が残るせいでファイル削除できない…

@presuku
Copy link
Member

presuku commented Jun 4, 2014

CursorLine overrides SpecialKey version 2を
もう、これ無しでは違和感があるほど常用してます。

そこで、 ft=gitconfig なファイルの Syntax で
表示が壊れる不具合があり、自信ないですが直せたっぽいので報告します。

  • 現象
    表示が乱れる

  • 再現方法

    1. 適当なバッファを開く
    2. set ft=gitconfigset noexpand する
    3. <TAB>url = (はハードタブのことです) と入力し、
      後につづけて入力すると url 辺の表示が壊れる
    4. その後、 url を検索してハイライトさせたり、他の行にカーソルを移すと元に戻ります。
    5. gitconfig の Syntax file が 無い場合には、
      :syn match Comment "\%(^\s*\)\@<=\a\k*\%(\s*\%([=#;]\|$\)\)\@=" としてください。
  • 修正箇所
    CursorLine_overrides_SpecialKey_ver2.patch で説明します。
    パッチの51〜52行目の、下記2行を削除してしまうとダメなようです。

    -           line = ml_get_buf(wp->w_buffer, lnum, FALSE);
    -           ptr = line + v;

    SpecialKey_overrides_CursorLine_ver2.patch でも同様の箇所で直ります。

  • 修正済みのパッチ
    下記のGistに上げておきました
    https://gist.github.com/presuku/d3d6b230b9b6dcfc0477

@mattn
Copy link
Member

mattn commented Jun 5, 2014

@DeaR ping の意味でもっかい突きます?

@DeaR
Copy link
Member

DeaR commented Jun 5, 2014

作りっ放し且つ、完全に存在を忘れてた系
正直もう数ヶ月は検証やら英文章作成含めロクに時間的余裕が作れそうにないので宜しく進めてくれるとありがたいなぁ、という他力本願状態だったりします:tired_face:
でっか過ぎな添付ファイルや7.4やNFAなんかで完全スルー状態な感じでしたしね
(更に当時は名義もnayuri aohimeではなかったりとフルコンボ:persevere:)

@noscript
Copy link

Great patch. Have you tried to submit it to neovim as well?

@usagi
Copy link

usagi commented Nov 25, 2014

困って気になってググったらここに辿り着いたけど本体のバグだったのか。なぜ未だに取り込まれないんだ。

@mattn
Copy link
Member

mattn commented Nov 26, 2014

突っついときました。

@k-takata
Copy link
Member

presukuさんのパッチも投げておいた方がよさそう。

@k-takata
Copy link
Member

mattn++

presakuさんのパッチを更にforkしたパッチがありました。
https://gist.github.com/kadzuya/ebc3047079566569d227
最新ソースだと、こっちじゃないと当たらないのかな。(未確認)

@presuku
Copy link
Member

presuku commented Nov 26, 2014

7.4.527で失敗しないようにアップデートしました。
(hg mqで普段使ってる奴を持ってきただけですけが…)
https://gist.github.com/presuku/d3d6b230b9b6dcfc0477

@k-takata
Copy link
Member

k-takata commented Dec 6, 2014

todo入りです。

Patch to fix display of listchars on the cursorline. (Nayuri Aohime, 2013)
Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
https://gist.github.com/presuku/d3d6b230b9b6dcfc0477

@presuku
Copy link
Member

presuku commented Dec 3, 2021

いつの間にかこの問題が直っていたのは自覚していて放置してたんですが、
いつまでも修正された問題が(自分のgist url付きで)todo.txtに残っているのも、良くないと思い、
今更ですが、削除依頼のissue立てときました。

@presuku
Copy link
Member

presuku commented Dec 6, 2021

vim/vim@017ba07 の patch 8.1.2029 で CursorLine overrides SpecialKey で修正され、
vim/vim@4700398 の Update runtime files で todo.txt から削除されました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants