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

newやvnewで作成したウィンドウにてsyntax regionで定義した色が付かない #1108

Open
norio13 opened this Issue Oct 17, 2017 · 6 comments

Comments

Projects
None yet
2 participants
@norio13

norio13 commented Oct 17, 2017

質問・報告の内容

リージョン開始位置の次行からリージョン終了位置までの範囲内において、
ウィンドウに表示されてない行からリージョン終了位置までの範囲に色が付きません。

サンプル1

sample1.vim:

set filetype=vim
new
execute 'normal! ' . (winheight(0) - 1) . 'o'
call setline('$', ['{a}{b', 'c', 'd', '}{e}'])
normal! gg
syntax region ErrorMsg start="{" end="}"
call feedkeys('G')

Vim起動:

vim --clean -S sample1.vim

色が付かない

リージョン開始位置の次行のcから、リージョン終了位置の } まで色が付きません。

色が付いてる

スクリプト実行後にCtrl-lを押下すると色が付きます。
カーソルを移動したりスクロールしても色は付きませんが、リージョン開始位置の行で文字を追加したり削除をすると色が付きます。

サンプル2

sample2.vim:

syntax on
set filetype=vim
new
execute 'normal! ' . winheight(0) . 'o'
call setline('$', ['{a}{b', 'c', 'd', '}{e}'])
syntax region ErrorMsg start="{" end="}"
call feedkeys('G')

Vim起動:

vim -Nu NONE -S sample2.vim

こちらもスクリプト実行後にCtrl-lを押下すれば色が付きます。
サンプル1と同様に、リージョン開始位置の行で編集すると色が付きます。
サンプル2の場合のみ、リージョン開始位置の { が見えなくなるまで上にスクロールした後、リージョン終了位置の行が見えるまでスクロールすると色が付きます。

Vimのバージョン

8.0.1184

OSの種類/ディストリ/バージョン

  • Linux Debian stretch 9.2 64bit

その他

newかvnewにbotrightを指定してウィンドウを作成した場合は再現しません。
topleftを指定した場合は再現します。

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east Oct 17, 2017

Member

サンプル1が「syntax ~ end="}}"」になってますけど、「syntax ~ end="}"」ですよね?

Member

h-east commented Oct 17, 2017

サンプル1が「syntax ~ end="}}"」になってますけど、「syntax ~ end="}"」ですよね?

@norio13

This comment has been minimized.

Show comment
Hide comment
@norio13

norio13 Oct 18, 2017

ご指摘ありがとうございます。
end="}}"ではなくend="}"でした。
sample1.vimを修正させて頂きました。

norio13 commented Oct 18, 2017

ご指摘ありがとうございます。
end="}}"ではなくend="}"でした。
sample1.vimを修正させて頂きました。

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east Oct 21, 2017

Member

Vim 8.0.1207 でsample1, sample2とも再現しませんでした。

vim --clean -S sample1.vim
vim -Nu NONE -S sample2.vim

ただ、以下で起動すると再現しました。

vim -S sample1.vim
vim -S sample2.vim

これだと私の.vimrcの内容に依存するんですが、何が関係しているか今から切り分けします。

Member

h-east commented Oct 21, 2017

Vim 8.0.1207 でsample1, sample2とも再現しませんでした。

vim --clean -S sample1.vim
vim -Nu NONE -S sample2.vim

ただ、以下で起動すると再現しました。

vim -S sample1.vim
vim -S sample2.vim

これだと私の.vimrcの内容に依存するんですが、何が関係しているか今から切り分けします。

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east Oct 21, 2017

Member
vim -u NONE -S sample2.vim

で再現しました。-Nの有無で挙動が変わりますね。
sample1の方はまだよくわかんないです。

Member

h-east commented Oct 21, 2017

vim -u NONE -S sample2.vim

で再現しました。-Nの有無で挙動が変わりますね。
sample1の方はまだよくわかんないです。

@norio13

This comment has been minimized.

Show comment
Hide comment
@norio13

norio13 Oct 24, 2017

h-eastさん検証ありがとうございます。
私の環境ではLinuxだと-Nのありなしにかかわらず再現しました。
Windowsだとsample2は再現しましたがsample1のほうが再現しませんでした。

norio13 commented Oct 24, 2017

h-eastさん検証ありがとうございます。
私の環境ではLinuxだと-Nのありなしにかかわらず再現しました。
Windowsだとsample2は再現しましたがsample1のほうが再現しませんでした。

@norio13

This comment has been minimized.

Show comment
Hide comment
@norio13

norio13 Dec 21, 2017

-N無しも再現できました。
環境変数TERMの値がxtermから始まる場合に-Nを抜かすと再現しました。
私はTERM=screen-256colorを指定してました。

--cleanと-Nありの場合は以下のpatchで改善しました。
-N無しの場合は改善できてないです。

diff --git a/src/os_unix.c b/src/os_unix.c
index ff0b0e88d..bd41ad811 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2270,6 +2270,7 @@ vim_is_xterm(char_u *name)
 		|| STRNICMP(name, "mlterm", 6) == 0
 		|| STRNICMP(name, "rxvt", 4) == 0
 		|| STRNICMP(name, "screen.xterm", 12) == 0
+		|| STRNICMP(name, "screen", 6) == 0
 		|| STRCMP(name, "builtin_xterm") == 0);
 }

patch適用後にTERMを指定してvimを起動して確認しました。

TERM=screen vim --clean -S sample1.vim
TERM=screen vim -Nu NONE -S sample2.vim

-N無しはpatchを当ててもまだ再現します。

TERM=xterm vim -u NONE -S sample2.vim
TERM=screen vim -u NONE -S sample2.vim

norio13 commented Dec 21, 2017

-N無しも再現できました。
環境変数TERMの値がxtermから始まる場合に-Nを抜かすと再現しました。
私はTERM=screen-256colorを指定してました。

--cleanと-Nありの場合は以下のpatchで改善しました。
-N無しの場合は改善できてないです。

diff --git a/src/os_unix.c b/src/os_unix.c
index ff0b0e88d..bd41ad811 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2270,6 +2270,7 @@ vim_is_xterm(char_u *name)
 		|| STRNICMP(name, "mlterm", 6) == 0
 		|| STRNICMP(name, "rxvt", 4) == 0
 		|| STRNICMP(name, "screen.xterm", 12) == 0
+		|| STRNICMP(name, "screen", 6) == 0
 		|| STRCMP(name, "builtin_xterm") == 0);
 }

patch適用後にTERMを指定してvimを起動して確認しました。

TERM=screen vim --clean -S sample1.vim
TERM=screen vim -Nu NONE -S sample2.vim

-N無しはpatchを当ててもまだ再現します。

TERM=xterm vim -u NONE -S sample2.vim
TERM=screen vim -u NONE -S sample2.vim
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment