VIM - 将正常模式功能转换为命令模式功能

Clo*_*oud 2 regex vi vim grep

美好的一天,

我有一个简单的函数,我已映射到CTRL+ L,我在正常模式下使用它来搜索单词或变量的项目中的所有实例:

" Find all occurences in files
map <C-l> :execute " grep -srnw --binary-files=without-match --exclude=*~ --exclude-dir=.svn  . -e " . expand("<cword>") . " " <bar> cwindow<CR>
Run Code Online (Sandbox Code Playgroud)

我试图从中创建一个命令模式功能,所以我可以这样做:

:mySearchFunction wordToFind
Run Code Online (Sandbox Code Playgroud)

这样,我有效地获得了一个简短的"查找所有文件"功能,因此我不必一直输入冗长的grep函数.我尝试. -e " .expand...在函数之后修改代码,但我不熟悉编写VI/VIM函数.我熟悉C和BASH脚本,但我无法按预期使用此功能.

我可以从我的这个映射中获得一些命令模式功能吗?

谢谢.


编辑:从@Conner发布修改后的答案版本.也不包括CTAGS tags文件.

command! -nargs=1 SearchAll execute " grep -srnw --binary-files=without-match --exclude={*~,tags} --exclude-dir=.svn  . -e " . expand("<args>") . " " <bar> cwindow
map <C-l> :SearchAll <cword><CR>
Run Code Online (Sandbox Code Playgroud)

Con*_*ner 6

command! -nargs=1 MySearchFunction execute " grep -srnw --binary-files=without-match --exclude=*~ --exclude-dir=.svn  . -e " . expand("<args>") . " " <bar> cwindow
map <C-l> :MySearchFunction <cword><CR>
Run Code Online (Sandbox Code Playgroud)

可能我建议调查ack和Ack.vim.

  • @Dogbert:如果在上面两行之后有任何附加字符,可能会导致第一个问题.但我相信你应该按照建议转到[ack](http://betterthangrep.com/why-ack/),然后你会有一个更好的工具来执行搜索,[Ack.vim](http:// www.vim.org/scripts/script.php?script_id=2572)插件已经实现了你想要的命令. (2认同)