- 一次只能特別標記一個字。
- 游標會跑掉, 得再按 ? 跑回來。
~/.vimrc
nmap <leader>* :syn match TempKeyword /\<<C-R>=expand("<cword>")<CR>\>/<CR> nmap <leader>c :syn clear TempKeyword<CR> hi TempKeyword ctermfg=red注意, 若你載入的 syntax file 或其它 vim script 有執行 :syntax clear 的話, 要將 hi TermKeyword 那行移到 :syntax clear 之後。像我用的 syntax/python.vim 就有執行 :syntax clear。
用法
<leader> 預設是對到反斜線 ("\"), 若沒設 <leader> 的話, 就是在想 highlight 的字上按 \*, 就會用紅色顯示這個字, 可以在多個字上按 \*, 效果會累加。不想看的時候, 按 \c 清掉所有 highlight 的字。下面是使用前後的對照圖 ( 游標移到 auth_type 後按 \* ):
備註
<C-R>=expand("<cword>")<CR> 是關鍵, 這段程式碼會取出目前游標所在的字, 展開後填在命令列上。之後再來詳細研究它的結構。<C-R>= 、 expand 、 <cword> 和 <CR> 四個拆開看我都懂, 但合在一起為何有這個效果, 就看不懂了。2011-05-17 更新: 經 BlueCat 提醒, 重看 <C-R> 的說明, 發現它的功能是填入特定 register 的值。而 = 這個 register 的功用比較特別, 執行後才會讓使用者填入 expression, 再回傳 expression 運算的結果。這樣這串指令合起來的意思就不難懂了。
<C-R>= 插入, expand() 展開特殊變數, 特殊變數<cword>是游標下的字, <CR> 是 Enter, 所以整段就是"插入目前游標下的字並送出"
回覆刪除這個讚也, 不過用底色 highlight 會不會比較明顯? 感覺著色會跟 syntax highlight 搞混
回覆刪除原來我看錯 <C-R>= 的意思, 重看一遍 :h <C-R> 才看懂, 謝啦
回覆刪除選紅色是有原因的, 因為我的 python 配色剛好沒用到紅色, 另外我的游標有設「光棒」, 用底色的話, 移到該行時, 反而會蓋掉關鍵字的背景色 XD
設 syntax on 之後這招就無效了啊 Orz, 要改用 matchadd & clearmatch.
回覆刪除nmap <leader>h :call matchadd("TempKeyword", "<C-R>=expand("<cword>")<CR>")<CR>
nmap <leader>d :call clearmatches()<CR>
我是在 vimrc 裡先 syntax on 後才設的, 這樣就不會失效
回覆刪除可是我不管放前面放後面, 只要 syntax 一開就無效 Orz..
回覆刪除