Vimscript 实例研究:Grep运算符(Operator),第二部分
e return endif echom shellescape(@@)endfunction保存并source文件,然后在可视模式下选中带特殊字符的文本,按下<leader>g。 Vim显示一个被转义了的能安全地传递给shell命令的文本。执行Grep我们终于可以加上grep!命令来实现真正的搜索。替换掉echom那一行,代码看起来就像这样:nnoremap <leader>g :set operatorfunc=GrepOperator<cr>g@vnoremap <leader>g :<c-u>call GrepOperator(visualmode())<cr>function! GrepOperator(type) if a:type ==# 'v' normal! `<v`>y elseif a:type ==# 'char' normal! `[v`]y else return endif silent execute "grep! -R " . shellescape(@@) . " ." copenendfunction看起来眼熟吧。我们简单地执行上一章得到的silent execute "grep! ..."命令。 由于我们不再把所有的代码塞进单个nnoremap命令里,现在代码甚至更加清晰易懂了!保存并source文件,然后尝试一下,享受自己辛勤劳动的成果吧!因为定义了一个全新的Vim运算符,现在我们可以在许多场景下使用它了,比如:viw<leader>g: 可视模式下选中一个词,然后grep它。<leader>g4w: Grep接下来的四个词。<leader>gt;: Grep到分号为止的文本。<leader>gi[: Grep方括号里的文本.这里彰显了Vim的优越性:它的编辑命令就像一门语言。当你加入新的动词,它会自动地跟(大多数)现存的名词和形容词搭配起来。练习阅读:help visualmode()。阅读:help c_ctrl-u。阅读:help operatorfunc。阅读:help map-operator。
Vimscript 实例研究:Grep运算符(Operator),第二部分