Jumps

vim の help をちゃんと読んでみよう series そのさん。 Jumps ( :help jump-motion ) について。

  • jump
    • 視覚的に "jump" したように見える command は大体 jump にあたるらしい。
    • 細かいところは help 読めで済むんだけど新規 file の編集も入るというところが気付きにくいところか。
  • jump list
    • jump した位置の履歴。 :jumps<CR> で表示可能。
    • 履歴の積み方として queue になっていて下から新しい位置が詰め込まれて上から押し出される。
    • この履歴を使って cursor 移動することができて <C-o> で古い位置 ( Older cursor position だかららしい ) へ、 <C-i> ( o のとなりにあるかららしい ) で新しい位置へ跳べる。
    • <C-o> で古い位置に飛んでから新しく jump すると <C-i> で戻れたところが破棄されてその新しい jump 先の位置が queue に積まれる。うーんこれ厳密な queue とは言えないな…。
    • jump list は window 毎で別管理でそれぞれ 100 固定らしい、固定て。
      • window を split すると jump list も複製される。
    • jump list に載っている位置を含む行を delete してしまうと jump list からその履歴が消えるらしい。
    • すでに履歴にある位置へ jump するとその履歴が一番新しい位置へ出てくるだけみたい。
    • ex-command ":keepjumps" を使うと履歴に載せずに jump できる、と。 motion なんかの normal command は :keepmarks normal gg と ":normal" と一緒に使ってやればいいわけか。
      • ex-command ":global" ( :help :global ) も記載しないとか書いてあるけどこれは逆に記載されると jump list が使い物にならなくなってしまうという pattern だな。
    • 逆に手動で履歴に追加するには m' という normal command を使うとも書いてある。あー Marks の内容と link しとる ( http://d.hatena.ne.jp/janus_wel/20100810/1281422617 ) 。
    • 'viminfo' に "'" ( U+0027 APOSTROPHE ) が含まれていると viminfo file に jump list が記録されるらしい。

jump list に似たようなモノに change list というのもあるらしい。

  • change list
    • change する ( insert mode で何か書いたり normal mode から operator で text をいじったりする ) とここにその位置が記録されていくらしい。
    • ex-command :changes<CR> で確認可能。
    • jump list との違いは buffer 毎に管理している点と undo すると新しいのが消える点、同じ行で複数の change があった場合最後の履歴のみが記録される点かな ?
      • 同じ行で〜、ってのは例えば x 連打で文字を消すとかがいちいち全部記録されるとうっとうしいだしょ ? って書いてある。
      • あと 'textwidth' だとか 'wrapmargin' だとか 79 ていう magic number だとかが出てきたり speed を重視してこれこれこういう風に実装されてるとか書いてあったり multi-byte 環境では云々というのはあまり影響がないような… ?
    • change list に載ってる行を削除すると jump するときにちょっとずれたりするよ !! とか書いてある。大雑把だなー。

これ両方とも消す方法って :set viminfo-=' して vim 落とすしかないのかな。うーんそもそも最近動いた位置へ戻るためだけの機能なのでそういうことは考えるなということなんだろうか。重要だと思う場所に jump したいなら事前に mark しといてねと言っている ? あーうんまぁ納得できる、かな。あとは感覚として覚えこませればいいのか。