【问题标题】:VIM - Convert normal-mode function to command-mode functionVIM - 将普通模式函数转换为命令模式函数
【发布时间】:2012-10-20 04:12:15
【问题描述】:

早安,

我有一个简单的函数,我已映射到 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>

我正在尝试用它来制作命令模式功能,以便我可以执行以下操作:

:mySearchFunction wordToFind

这样,我有效地获得了一个简短而简单的“在所有文件中查找”功能,因此我不必一直输入冗长的 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>

【问题讨论】:

    标签: regex vim grep vi


    【解决方案1】:
    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>
    

    我可以建议研究一下 ack 和 Ack.vim。

    【讨论】:

    • 关闭,但我有两个问题:1)运行命令后,我得到:E488:尾随字符:cwindow^M 2)这只找到完全匹配的整个匹配项。我会怎么做才能找到部分匹配项(即:如果我搜索 MY_GLOBAL_VAR,它应该会找到 MY_GLOBAL_VAR_1、MY_GLOBAL_VAR_2 等)。谢谢。
    • 通过编辑对我的原始问题的回答添加稍微修改的版本。 +1;接受。
    • @Dogbert:如果在上述两行中的任何一行之后有任何附加字符,则可能会导致第一个问题。但我相信您应该按照建议移至ack,然后您将有一个更好的工具来执行搜索,并且Ack.vim 插件已经实现了您想要的命令。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2016-01-08
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多