原版的 ShowMarks 在 2004 後就沒更新了,在 Vim7 使用會有一些問題。 我聯絡不上作者,又 script 授權是 public domain,於是直接開個版本來維護:

bootleq/ShowMarks - GitHub

其中幾個修改參考了 vi/vim使用进阶: 指随意动,移动如飞 (二) – 易水博客 的 patch。

主要問題與修改

  • key mapping

    ※如果你有舊版,可以下 :verbose map <Leader>m 檢視它定義的 5 個 mapping,另有 \smm 也是。
    commit:a7d7d62 首先要改的是 map => nmap,以免在 Visual mode 或 Select mode(例如 snipMate 停著等輸入時就是 Select mode)按 m 變成 ShowMarks 操作導致錯誤。
    再來增加了停用預設 mapping 的選項和 <Plug>ShowMarksOn 這樣的 mapping(讓使用者用 map mo <Plug>ShowMarksOn 自訂按鍵),應該是 plugin 預設 map 的最佳作法。 commit:72727b 另外原版用到 \sm 來轉接 m 指令(以便按下 m 時,除了原本 m 要做的事,還要 call 別的函數),這裡利用 :normal! 不會被 remap 的特性取代,也把它拿掉了。
  • 「刪除 mark」的實作

    commit:7ad76a
    單純是 Vim7 的新功能 :delmarks
    舊版 :ShowMarksClearMark 作法是把 mark 都移到第 0 行,幾乎是不堪用的。
  • 判斷 mark 所在行數

    commit:6e087f4
    Vim 6/7 處理 line("'g")(取 g mark 的行數)時,若 mark 在別的 buffer 就會有不一致結果。
    單純改用 getpos("'g") 來判斷。
  • 放棄 Vim 6 以下的支援

    掰掰。