从vim中的命令调用它时函数失败

时间:2013-09-18 07:57:46

标签: vim

当我在当前文件中找到该单词时,我需要先输入“/ keyword”,但我看不到所有匹配的行,所以我尝试使用以下命令来做一个快捷方式,但它没有不行,请你帮忙检查一下它失败的原因?

function! FindCurrentFile(pattern)
    echo a:pattern
    execute ":vimgrep" . a:pattern . " %"
    execute ":cw"
endfunction

command! -nargs=1 Fi call FindCurrentFile(<args>)

3 个答案:

答案 0 :(得分:3)

顺便说一句,如果您只需要快速浏览匹配项,只需使用

即可
:g//print

:g//p

(您甚至可以完全忽略p,因为:print:global命令的默认操作。)

当前缓冲区关闭行号时,:g//p生成的结果很难快速获取。在这种情况下,使用:g//#显示与行号匹配的内容。

适用于关键字的另一个技巧是普通模式命令[I。它显示了当前缓冲区中光标下所有关键字实例的快速概览。请参阅:h [I

答案 1 :(得分:2)

<args>替换为命令参数原样 - 这意味着如果你写:

Fi keyword

命令将运行:

call FindCurrentFile(keyword)

这是错误的 - 因为您要传递字符串"keyword",而不是名为keyword的变量。

你需要的是<q-args>,它引用了这个论点。

顺便说一下,如果你想要多个参数,你必须使用<f-args>,它引用多个参数并用,分隔它们。

答案 2 :(得分:2)

尝试将函数中的行更改为:

execute ':vimgrep "' . a:pattern . '" ' . expand("%")