0

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

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

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

3 回答 3

3

顺便说一句,如果您只需要快速了解比赛,您可以简单地使用

:g//print

或者

:g//p

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

当当前缓冲区关闭了行号时,生成的结果:g//p可能难以快速接受。在这种情况下:g//#,用于显示与行号的匹配。

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

于 2013-09-18T08:45:44.470 回答
2

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

Fi keyword

该命令将运行:

call FindCurrentFile(keyword)

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

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

顺便说一句,如果您想要多个参数,则必须使用<f-args>,它引用多个参数并用,.

于 2013-09-18T08:07:01.653 回答
2

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

execute ':vimgrep "' . a:pattern . '" ' . expand("%")
于 2013-09-18T08:08:54.030 回答