我阅读了有关vim的文档,作者建议应在.vimrc中放入一行代码,但我完全不知道它是什么。

command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1, <bang>0)

command!-bang-nargs等是什么?

#1 楼

与往常一样,帮助是您最好的朋友:

:h :command


:com[mand][!] [{attr}...] {cmd} {rep}

定义用户命令。该命令的名称为
{cmd},其替换文本为{rep}。该命令的
属性(见下文)为{attr}。如果命令
已经存在,则报告错误,除非出现!!被指定为
,在这种情况下将重新定义命令。


因此:command!用于创建可从命令行使用的新命令。这里的新命令是:Find,它用于执行fzf#vim#grep(),这是对插件fzf的调用,该插件将允许模糊查找某些文件。 >


:h :command-nargs -nargs用于使新命令能够接受参数:Find arg1


:h :command-bang -bang用于使新命令能够像!中那样解释:Find!


!之后的command用来告诉vim重新定义该命令(如果该命令已经存在),通过这种方式,当您获取.vimrc时,您就没有了错误消息。

关于传递给fzf函数的参数,我将让您阅读插件的文档以查看其作用:)

评论


您回答比文档更精确。因此,如果我没有安装fzf,那就表示我想定义一个更简单的命令,该命令命令! -bang -nargs = *查找'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob“!.git / *“ --color” always“'是否有效?

–图恩·范(Tuyen Pham)
17-10-18在16:35

@TuyenPham可能不是:您的注释中的代码创建了一个Find命令,该命令将由rg --column等代替...但是rg不是vim命令,它是fzf函数的参数,因此Vim将回显错误。如果您想要一个简单命令的示例,请参阅以下命令: DT windo diffthis。它创建命令:DT,该命令不带参数或任何东西,并且在vim中启动diffmode。该命令的{rep}部分必须是vim可以理解的表达式。

–statox♦
17-10-19在6:45

我相信Tuyen在rg中指的是ripgrep,它是与FZF相对的另一种工具。

– Jimmy MG Lim
20年5月11日在14:16