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

undotree() の返すツリー上の現在位置がおかしい場合がある #1113

Closed
machakann opened this Issue Nov 7, 2017 · 7 comments

Comments

Projects
None yet
2 participants
@machakann

machakann commented Nov 7, 2017

質問・報告の内容

undotree() 関数を使うとアンドゥに関する諸情報が取得できます。

"seq_last"	使用されたアンドゥシーケンス番号の最大値。
"seq_cur"	アンドゥツリーの現在のシーケンス番号。いくつか
  	の変更がアンドゥされた状態だと "seq_last" と違
  	う値になる。
"time_cur"	最後に |:earlier| 系のコマンドが使われた時間。
  	読みやすい形式に変換するには |strftime()| を使
  	う。
"save_last"	最後にファイルが保存された番号。保存がまだなら
  	ゼロになる。
"save_cur"	アンドゥツリー内の現在位置の番号。
"synced"	最後のアンドゥブロックが同期されていれば非ゼ
  	ロ。これはユーザーからの入力を待機しているとき
  	に起こる。|undo-blocks| 参照。
"entries"	アンドゥブロックの情報を表す辞書のリスト。

ですが、このうちアンドゥツリー上の現在のシーケンス番号 seq_cur が場合によっては正しくない位置を指しているように思います。再現手順は以下の通りです。

  1. 新しいバッファを開く :new
  • undotree().seq_cur == 0
  
  1. 何か入力 :normal! afoo
  • undotree().seq_cur == 1
foo
  1. さらに何か入力 :normal! abar
  • undotree().seq_cur == 2
foobar
  1. アンドゥ :normal! u
  • undotree().seq_cur == 1
foo
  1. 何か入力 :normal! abaz
  • undotree().seq_cur == 3
foobaz
  1. アンドゥ :normal! u
  • undotree().seq_cur == 2 <- !!!
foo

六番目の手順の終了時の undotree().seq_cur に期待するのは 1 だと思います。何か勘違いをしていたらすいません。

Vimのバージョン

8.0.1257

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

  • Windows 10 Pro 64bit

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

いくつかあるアンドゥにかかわるプラグインがなぜ動いているのか疑問に思ったので調べたところ mbbill/undotree のコードにワークアラウンドに関するコメントがありました。

mbbill/undotree/autoload/undotree.vim

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 8, 2017

Member

https://github.com/vim/vim/compare/master...ichizok:fix/undotree.diff
バグのようですね。これでどうでしょうか?

Member

ichizok commented Nov 8, 2017

https://github.com/vim/vim/compare/master...ichizok:fix/undotree.diff
バグのようですね。これでどうでしょうか?

@machakann

This comment has been minimized.

Show comment
Hide comment
@machakann

machakann Nov 8, 2017

ありがとうございます。しばらく試してみましたが問題なく、期待通りの動作をしているようです。

machakann commented Nov 8, 2017

ありがとうございます。しばらく試してみましたが問題なく、期待通りの動作をしているようです。

@machakann

This comment has been minimized.

Show comment
Hide comment
@machakann

machakann Nov 9, 2017

すいません、以下の場合におかしいようです。

  1. :new
  2. :normal! Aabc
  3. :undo
  4. :normal! Adef
  5. :undo

手順5の終了後に期待する undotree().seq_cur0 だと思うのですが、 1 が返ります。

machakann commented Nov 9, 2017

すいません、以下の場合におかしいようです。

  1. :new
  2. :normal! Aabc
  3. :undo
  4. :normal! Adef
  5. :undo

手順5の終了後に期待する undotree().seq_cur0 だと思うのですが、 1 が返ります。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 9, 2017

Member

@machakann 確認ありがとうございます。
パッチをアップデートしたので、もう一度試してもらえますか?

Member

ichizok commented Nov 9, 2017

@machakann 確認ありがとうございます。
パッチをアップデートしたので、もう一度試してもらえますか?

@machakann

This comment has been minimized.

Show comment
Hide comment
@machakann

machakann Nov 11, 2017

ありがとうございます、すべて期待通りの動作でした。

machakann commented Nov 11, 2017

ありがとうございます、すべて期待通りの動作でした。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 11, 2017

Member

vim/vim#2319
投げました。

Member

ichizok commented Nov 11, 2017

vim/vim#2319
投げました。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok
Member

ichizok commented Nov 12, 2017

8.0.1290
vim/vim@80eaddd

@ichizok ichizok closed this Nov 12, 2017

@ichizok ichizok added the xlose/fixed label Nov 12, 2017

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