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

statusline上でTerminal windowの行数を表示するとエラーが出る #1167

Closed
ichitera opened this Issue May 10, 2018 · 7 comments

Comments

Projects
None yet
3 participants
@ichitera

ichitera commented May 10, 2018

質問・報告の内容

statuslineにwindowの行数を表示するときに起こるエラーについて報告をします。
Terminal windowの行数が10000付近のとき、次が起こります。

  1. エラーが出る (E315: ml_get: invalid lnum 9846)
  2. 行数の表示が減る (10000の次に9001になる) (termwinscrollの期待通りの動作でした)
  3. Terminal-Normal modeとTerminal-Job modeを行き来するたびに行数が増える

statuslineを表示する設定には次を使いました。
(以降の再現手順ではvimrcというファイル名で参照します。)

language C
let &statusline="%{printf('%d',line('$'))}"

再現手順は次のとおりです。

1つめのエラーが出る手順:

  1. vim.exe -u vimrcを実行 (cmd.exe内で確認しました。)
  2. :termを入力
  3. yes | head -n 9850 (terminalのwindow内で入力)
  4. <C-w>Nを入力
  5. aを入力
  6. yes | head -n 9850 (terminalのwindow内で入力)
  7. (エラーが出ます (E315: ml_get: invalid lnum 数字))

期待動作としては、7でエラーが表示されないものと思っています。

操作のキャプチャ:
1

2つめの行数の表示が減る手順:

~ 1. `vim.exe -u vimrc`を実行 (cmd.exe内で確認しました。) 2. `:term`を入力 3. `yes | head -n 10004` (terminalのwindow内で入力) 4. (statuslineには10000が表示されます。) 5. ``を入力 6. (statuslineには9001が表示されます。)

期待動作としては、6で10001が表示されるものと思っています。

操作のキャプチャ:
2

3つめの行数が増える手順:

  1. vim.exe -u vimrcを実行 (cmd.exe内で確認しました。)
  2. :termを入力
  3. yes | head -n 11000 (terminalのwindow内で入力)
  4. (statuslineには9996が表示されます。)
  5. <C-w>Nを入力
  6. aを入力
  7. (statuslineには10010が表示されます。)
  8. <C-w>Nを入力
  9. aを入力
  10. (statuslineには10024が表示されます。)

期待動作としては、7, 10で4と同じ行数9996が表示されるのものと思っています。

操作のキャプチャ:
3

Vimのバージョン

8.0.1806

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

(なるべく詳しく書いてください 記述例:)

  • Windows 10 Home 64bit (10.0.17134.48)

使用している or 関係していそうなプラグイン

(関係していそうなプラグインなどがあればココに書いてください)

その他

(関連して何か気がついたこと、気になることがあればココに書いてください)

@mattn

This comment has been minimized.

Member

mattn commented May 10, 2018

ありがとうございます。再現しました。

@mattn

This comment has been minimized.

Member

mattn commented May 10, 2018

9850 という値から推測すると、terminal は通常のバッファと異なりスクロールバックの量(termwinscroll)しか行を持っていないにも関わらず行数はオフセットの値を保持する作りなので、その値で行を取りに行ってしまうとエラーになるという事だと推測します。

@mattn

This comment has been minimized.

Member

mattn commented May 10, 2018

2回実行しなくても再現できそうですね。

set termwinscroll=100

で小さめに設定

yes | head -n 200

その後 CTRL-w Na CR を繰り返し数回入力すると出ました。どうやら terminal normal mode に移る際に行がおかしくなるっぽいすね。

@ichitera

This comment has been minimized.

ichitera commented May 11, 2018

ご確認ありがとうございます。
termwinscrollを小さめに設定する方法でも再現しました。

issue報告を訂正します。2つ目の項目は誤報告でした。
termwinscrollオプションを知らず、helpを見ると10000→9001行になるのは期待通りの動作ですね。

@mattn

This comment has been minimized.

Member

mattn commented May 13, 2018

vim/vim@05c4a47

これで動作が変わってしまいましたね。エラーにならなくなりました。ただ、 terminal normal mode に移った際に一番上の行に移動してしまっていて、これはバグだと思うのでまだ issue は残しておきます。

@mattn

This comment has been minimized.

Member

mattn commented May 16, 2018

vim/vim@4d6cd29

これで直った気がします。(報告も何もしてなかったですが)

@ichitera

This comment has been minimized.

ichitera commented May 16, 2018

ありがとうございます。vim/vim@4d6cd29 に更新したところ、エラーが起こらなくなりました。
解決されましたのでcloseいたします。
mattnさん、ありがとうございました。

@ichitera ichitera closed this May 16, 2018

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