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

`vim -c startinsert` で起動すると表示がおかしい #1051

Open
ichizok opened this Issue May 11, 2017 · 5 comments

Comments

Projects
None yet
3 participants
@ichizok
Member

ichizok commented May 11, 2017

質問・報告の内容

  1. vim -Nu NONE -c startinsert file で起動すると、
  • 1行目に -- INSERT -- の表示が出る(描画上だけで、buffer には入っていない)
  • ステータス行の表示が正しくない&切れている
    expect: -- INSERT --
    actual: "file" [New[New File] が途中で切れている)
  1. vim -Nu NONE -c startinsert(ファイルを指定しない)で起動した際、
    ステータス行の -- INSERT -- がboldになっていない場合がある。
    何か入力するとboldになる。

Vimのバージョン

8.0.0596

  1. は 8.0.0567 以降
  2. は macOS でのみ確認。7.4.898 (pre-installed) でも発生する

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

  1. について
  • macOS 10.12.4 / Terminal.app / iTerm2.app / alacritty
  • Ubuntu 16.04 / gnome-terminal
    現象は発生しているが、すぐに再描画が走って正常画面になるので
    VNC経由等で描画が遅い状態でないと判別できないと思われる。
  • CentOS 7 / console

tmux や mosh の上では発生しない。

原因

1. について

8.0.0567 (vim/vim@fc8f111) で ambiwidth 判定 (may_req_ambiguous_char_width()) のタイミングが変わったため。

説明のため、端末サイズは 80x24 とする。
Vim 起動後、以下のような流れにより現象が発生する。

  • カーソルを最下段の (24, 1) に移動し、"file" [New File] を描画する
  • may_req_ambiguous_char_width() 内でカーソルは (1, 1) に移動されるが、
    term_windgoto() による移動のため、Vim はこの状態を追跡してない
    (screen.c の screen_cur_col, screen_cur_row が更新されない)
  • Vim 的にはカーソルは最下段にあるので、そのまま (1, 1) に -- INSERT -- を描画する
  • (本来表示されているはずの)-- INSERT -- の後続桁を消去するためにカーソルを (24, 13) に移動し、
    erase line するので "file" [New File]File] 部分が消える

修正案:

may_req_ambiguous_char_width() 内で、カーソル移動後に screen_start() を呼んで screen_cur_col, screen_cur_row をリセットする。

https://github.com/vim/vim/compare/master...ichizok:fix/startup-insert.diff
(インデントが変だったのを直したので変更が多いが、実質 screen_start() の追加のみ)

2. について

最初の -- INSERT -- が描画される時点で highlight_attr 配列が未設定のため。
その後の状態は DA2 Response を受けるタイミングによる (trachet で観察した限りではそのように見える) 。
DA2 Response が端末画面を空白で初期化している最中に来ると、画面初期化後に modeline を再描画する。
この時点では highlight_attr は設定済みなので bold になる。
DA2 Response が早すぎると再描画されずそのまま。

関連?

vim/vim#1658

@uakms

This comment has been minimized.

Show comment
Hide comment
@uakms

uakms May 11, 2017

I can reproduce the problem too.

1. について

problem

ただし Terminal, iTerm2 共に、あいまい幅文字の設定をオフにした場合にのみ発生しました。

  • Terminal

terminal

  • iTerm2

iterm2

2. について

Terminal でしか試していませんが、やはり設定がオフの場合に細くなるようです。

  • オンの時(こちらが正常?)

on

  • オフの時

off

どちらも起動したばかりの画像ですが、オンの時は初期画面が消えていて、オフの時は消えていません。

uakms commented May 11, 2017

I can reproduce the problem too.

1. について

problem

ただし Terminal, iTerm2 共に、あいまい幅文字の設定をオフにした場合にのみ発生しました。

  • Terminal

terminal

  • iTerm2

iterm2

2. について

Terminal でしか試していませんが、やはり設定がオフの場合に細くなるようです。

  • オンの時(こちらが正常?)

on

  • オフの時

off

どちらも起動したばかりの画像ですが、オンの時は初期画面が消えていて、オフの時は消えていません。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok May 12, 2017

Member

@nakinor 検証ありがとうございます。
曖昧幅文字の設定をONにすると、起動シーケンスで ambiwidthdouble になって画面が再描画されるので正常画面になりますね。(gnome-terminal での状況と類似)

Member

ichizok commented May 12, 2017

@nakinor 検証ありがとうございます。
曖昧幅文字の設定をONにすると、起動シーケンスで ambiwidthdouble になって画面が再描画されるので正常画面になりますね。(gnome-terminal での状況と類似)

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Jun 5, 2017

Member

問題1は 8.0.0611 で直ったようです。
vim/vim@976787d

Member

ichizok commented Jun 5, 2017

問題1は 8.0.0611 で直ったようです。
vim/vim@976787d

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Jun 29, 2017

Member

今見ると太字に見えますがどうでしょうか?太字というかハイライトされてる。

Member

mattn commented Jun 29, 2017

今見ると太字に見えますがどうでしょうか?太字というかハイライトされてる。

@uakms

This comment has been minimized.

Show comment
Hide comment
@uakms

uakms Jun 29, 2017

8.0.0688 ですが、問題 1 も、問題 2 も、変化はありませんでした。
(以前のスクリーンキャスト・スクリーンショットと同じ状況です)

uakms commented Jun 29, 2017

8.0.0688 ですが、問題 1 も、問題 2 も、変化はありませんでした。
(以前のスクリーンキャスト・スクリーンショットと同じ状況です)

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