修改 ShowMarks.vim 於 Vim7 的不相容
原版的 ShowMarks 在 2004 後就沒更新了,在 Vim7 使用會有一些問題。 我聯絡不上作者,又 script 授權是 public domain,於是直接開個版本來維護:
其中幾個修改參考了 vi/vim使用进阶: 指随意动,移动如飞 (二) – 易水博客 的 patch。
主要問題與修改
-
key mapping
※如果你有舊版,可以下:verbose map <Leader>m
檢視它定義的 5 個 mapping,另有 \sm 和 m 也是。
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 以下的支援
掰掰。
有 0 個意見
☂