[count]tabnextの挙動が[count]tabcloseや[count]tabonlyなどのcountの解釈と異なる #976

Open
itchyny opened this Issue Nov 9, 2016 · 26 comments

Projects

None yet

4 participants

@itchyny
itchyny commented Nov 9, 2016 edited

質問・報告の内容

:.+2tabnext が現在のタブの2つ右ではなくて、常に3番目のタブに移動する。

:tabnew
:tabnew
:tabnew
:tabnew
:tabnew
:4tabnext (ここまではよい)
:.+2tabnext

結果、3番目のタブに移動する。

:.+2tabclose は現在のタブの2つ右を閉じる挙動なので、これと同じように現在のタブの2つ右に移動するのが自然だと思います。また、 $tabnext は一番最初のタブに移動するようですが、最後に移動するほうが自然だと思います。

https://twitter.com/itchyny/status/795664235397136384

Vimのバージョン

8.0.71

( :version で確認できます)

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

  • macOS Sierra

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

vim -u NONE

その他

ヘルプを見たら [count]tabnext についての言及は見当たらないので未定義かもしれないです。
tabpreviousも関連しそうです。今の挙動は :.+2tabprevious = 3tabprevious (= 3gT) に見えますがこれでよいのかどうかよくわからないです。

@h-east h-east self-assigned this Nov 9, 2016
@h-east
Member
h-east commented Nov 9, 2016 edited

patchです。確認をお願いします。
https://gist.github.com/h-east/4d42bf152311600c6a11ac06a292d14d

@itchyny issue登録ありがとうございます👍

@itchyny itchyny changed the title from [count]tabnextが直感に反している to [count]tabnextの挙動が[count]tabcloseや[count]tabonlyなどのcountの解釈と異なる Nov 9, 2016
@itchyny
itchyny commented Nov 9, 2016

常に3番目のタブに移動する

じゃなくて(カーソル行番号+2)番目ということですね… タブの移動のコマンドがカーソル行に依存して挙動が変わるのがおかしいということを主張すれば通せそう。

@h-east
Member
h-east commented Nov 9, 2016

tabnextのtestを追加しました。(rev.2)
tabpreviousのtestを追加したらエラーが出たので一時的にコメントアウトしています。後で調査します。
https://gist.github.com/h-east/4d42bf152311600c6a11ac06a292d14d

@h-east
Member
h-east commented Nov 10, 2016

tabprevioustabNextはカウントの体系が他のタブコマンドと異なってますね。常に前方のタブページへの相対指定になってます。他と合わせた方が良い気もしますけどどうでしょうか?。
(その場合、:+3tabnext:-3tabNextは同じ動作になる??)

あと、後方カウント指定で+2-3等の相対指定や$が出来るのは現状でtabmoveだけかな?

:tabmove +2
:tabmove -3
:tabmove $

これをtabclose, tabonly, tabnext, tabprevious, tabNextで採用してもいいかも。
(:tabnext $:tablastがあるだろって突っ込みは分かる)

@h-east
Member
h-east commented Nov 14, 2016

patch更新しました。(rev. 4)
https://gist.github.com/h-east/4d42bf152311600c6a11ac06a292d14d
:tabnextを後方カウント指定可能にしました。

tabnext
tabnext 1
tabnext $
tabnext +
tabnext -
tabnext +2
tabnext -3
...
@ryunix
Member
ryunix commented Nov 15, 2016

本件と類似で{count}gTの挙動が直感的ではなかったので報告させていただきます。

以下は日本語ヘルプから引用
{count}gt: {count} 番目のタブページに移動します。
{count}gT: {count} の数だけ前のタブページに移動します。

@ryunix
Member
ryunix commented Nov 16, 2016

今気付いたのですが、直感的でないのは{count}gtのほうですね 😓

@itchyny
itchyny commented Nov 16, 2016

gtの挙動を変えるのは互換性の関係で難しい気がします… https://groups.google.com/d/msg/vim_dev/CTIIpzvcATY/KGBQxExtCAAJ

@h-east
Member
h-east commented Nov 17, 2016 edited

なるほどです。ということは、tabprevioustabNextについてはカウント体系は変えないほうがよさそうだし、(後方カウント指定も含む)は変更対応しないほうが良さそうですね。
それか再提案チャレンジするか。でも1年経ってないしやめとこう。

@itchyny
itchyny commented Nov 17, 2016

全体引用しているからBramの the current behavior がどれなのかよくわからないですね… {count}gt の挙動を変えるのはきびしそうだけど :tabnext +{count} を変えるのはいけるんじゃないかという印象なのですが、いかがでしょうか。

@h-east
Member
h-east commented Nov 17, 2016

私のさきほどのコメントは「tabprevioustabNext」(gT)に対してです。相対指定が基本になっているのでどうしようもないかなぁと。
tabnextは変える気マンマンですよ👍

@itchyny
itchyny commented Nov 17, 2016

おっとすみません、後方カウント指定を読み違えてしまったようです 🙇 頼もしいです。

@h-east
Member
h-east commented Nov 17, 2016

こちらこそ微妙な文章でした 🙇
#976 (comment) をわかりやすい文章に編集しました。

@h-east
Member
h-east commented Dec 18, 2016

patch更新しました。(rev. 5)
https://gist.github.com/h-east/4d42bf152311600c6a11ac06a292d14d

  • :tabNext,:tabpreviousの前方カウント指定を数字だけにした(どうせ相対だけですし)。後方カウント指定に対応した(数字のみ)
  • :tabnextを後方カウント指定に対応した(数字のみで絶対指定、+-付きで相対指定、$で最後のタブ)

調整中:

  • :0tabnext,:tabnext 0を受け付けてしまっている。
  • :tabnext 99,:tabnext +99,:tabnext -99を受け付けてしまっている。(じつは:tabmoveも)
@h-east
Member
h-east commented Dec 23, 2016

patch更新。(rev. 6)
コーディング完了、test追加。
残すはドキュメントのみ!

patchのtest_tabpage.vimの差分を見ればどういう動きをするか分かると思う。

@h-east
Member
h-east commented Dec 24, 2016

patch更新。(rev. 7)
完成。

@itchyny and All>
時間のある時に動作確認をお願いします。気になったところがあればコメント下さい。

PS
:tabonlyも後方カウント対応した方が良いかもしれないけど、今回はやめときます。

@itchyny
itchyny commented Dec 25, 2016

動作確認しました。tabnext/tabpreviousのrangeと後方カウントの組み合わせで試してみまて、意図通りに動くようになったのを確認しました。ありがとうございます!

@itchyny
itchyny commented Dec 25, 2016

change the tab page to the {left,right,first,last}go to the {previous,next,first,last} tab page のほうが良さそうかなと思いました。

@h-east
Member
h-east commented Dec 25, 2016

@itchyny 確認&提案thanks. help修正しました。(rev. 8)

@k-takata
Member

:-tabnext " go to the tab page to the previous

@itchyny さんの指摘の通り、"go to the previous tab page" の方が自然だと思います。ほかも同様。
あと "Both absolute and relative tab page numbers can be used." とか追加しておくとどうでしょう。

@h-east
Member
h-east commented Dec 26, 2016

@k-takata あっ、 @itchyny さんの指摘どおりに直したつもりになってました。汗。直しました(rev. 9)。Thanks👍

あと "Both absolute and relative tab page numbers can be used." とか追加しておくとどうでしょう。

[range]自体がそういう仕様なので明記しなくてもいいかも。ただ、:tanprevious:tanNextの方は相対指定できないのでそっちに以下の文章を追加しました。

Only absolute tab page numbers can be used.
@k-takata
Member

そっちだと、"Only absolute {count} can be used." とすべきでしょう。
表記の {count} としては絶対指定ですが、動作としては現在のタブに対する相対番号なので、これでも誤解を招きそうな気もしますが…

@h-east
Member
h-east commented Dec 26, 2016

うーん、悩んだ末に Only absolute tab page numbers can be used.消しました。(rev. 10)

@h-east
Member
h-east commented Jan 9, 2017 edited

patch更新。(rev. 11)

  • :tabonlyを後方カウント指定に対応した(数字のみで絶対指定、+か-付きで相対指定、$で最後のタブ)

  • :tabcloseも対応したんですが、make test_tabpageがfailするのとmake testでSEGVするので一旦コメントにしています。要調査。
  • Write document and test for :tabonlyand:tabclose
@h-east
Member
h-east commented Jan 10, 2017 edited

patch更新。(rev. 12)

  • :tabcloseを後方カウント指定に対応した(数字のみで絶対指定、+か-付きで相対指定、$で最後のタブ)
  • make test_tabpageがfailしないようにtestを修正。(←いいのか!?)
  • make test ALL DONE.

  • Write document and test for :tabonlyand:tabclose
@h-east
Member
h-east commented Jan 11, 2017

patch更新。(rev. 13)
https://gist.github.com/h-east/4d42bf152311600c6a11ac06a292d14d

  • Write document for :tabonlyand:tabclose

  • Write test for :tabonlyand:tabclose
  • make test_tabpageがfailしないようにtestを修正。(←ほんとにそれでええんか!?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment