Skip to content

reletivenumber の仕様が、:copy などの 行数指定コマンド類と 非常に相性が悪い #1432

@KSR-Yasuda

Description

@KSR-Yasuda

内容

relativenumber (行数表示を、相対行数 で表示する) の設定について、
:copy 等の 行数を指定するコマンドと 非常に相性が悪い挙動をする気がします。

これらの挙動、ちょっと使いづらいような気がしますが、どうでしょうか?

範囲指定 → コマンド の際、選択範囲 末尾 基準の行数を表示する

Shift-V で、ビジュアルモードの 複数行数指定している際 の状況です。

この際、:'<,'> copy +N (N行目 後 にコピー) を実行する際の基準行は、
選択範囲の最初 (= '<) です。

しかし、選択状態から、: で コマンド入力しようとすると、
カーソルが 選択範囲 末尾 に移動するため、relativenumber の表示は、末尾基準 となります
(コマンドウィンドウに :'<,'> と入力されるので、最後の '> の位置 に移る、という意図?)。

vim_rnu_range_20240607_104635

そのため、relativenumber表示 をそのまま使うと、意図しないところにコピーされます。

実現方法

  • 範囲指定のコマンド実行 の際に、カーソル行を、基準行の先頭 に移動する

Pros 良くなる点

  • コマンド実行の際に、カーソル配置 と 相対行数指定の基準行 がズレない

Cons 悪くなる点

relativeの指定行 までの間に fold範囲 があると、行数指定がズレる

相対行数での指定の際に、指定行の間に foldしている領域 が挟まる場合です。

以下、L10 ~ L14, L20 ~ L29 の 2つのfold がある状態で、
カーソルは、それより前の L5 にいます。

vim_rnu_fold_20240607_105349

ここで、2つ目のfold範囲 L20 ~ L29 をコピーするため、
:+11 co -1 を実行すると、L16 (最初の fold を開いた状態での、5 + 11 = 16行目) がコピーされます。

絶対行数指定で、:20 co -1 をすると、L20 ~ L29 の fold範囲全体 がコピーされますが、
そのつもりで実施すると、おかしな挙動になります。

実現方法

  • 相対行数指定の際、foldの状況 を加味する

Pros 良くなる点

  • fold表示と、相対行数指定 が 一致する

Cons 悪くなる点

Vimのバージョン

  • Vim v9.1.445

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

  • Windows 10 Pro 23H2 (v10.0.22631.3593)
    • MSYS2 (msys2-runtime v3.5.3-3)

その他

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions