创建自定义映射以在 Vim 中搜索函数定义


Creating custom map to search for function definition in Vim

假设我正在编写一些PHP代码,我想出了一个函数调用,我知道它在这个文件中定义。我想创建一个映射,以便它自动查找'function <WORD_UNDER_CURSOR>'.

我设法通过使用 nmap <Leader>8 /function <C-r><C-w><CR> 来做到这一点,但问题是我的搜索包装已关闭(我希望这样(,所以有一半时间我最终会出现屏幕末尾错误,不得不按N自己向上看。我试图在映射(nmap <Leader>8 /function <C-r><C-w><CR>Nn(的末尾附加一个Nn,但它不起作用。我不知道为什么!事实上,我放在<CR>之后的任何东西似乎都没有任何效果。

你们能给我建议并向我解释一下吗?我发现关于 Vim 映射的文档真的很难找到你要找的东西。例如,我仍然不知道<C-r><C-w>是什么!

要向前搜索,请使用/,要向后搜索,请使用?。因此,只需使用现有地图中的?而不是/

<C-r><C-w>是 Emacs 表示法表示^R^W。我不知道 emacs 符号在 vi 实现中做了什么,但它就在那里。 不过:help ^R^W有效。它只是在光标下方插入单词。

Vim 可以用 gd 原生地做到这一点,这意味着"转到定义",顺便说一下,这不限于函数。请参阅:help gd


<C-r><C-w>表示法在 Vim 的文档中随处可见,在谈论 vim 时或多或少是编写组合的标准方式。Emacs 的标准符号是 C-r C-w ,没有<>

键入 :help 以获取有关使用文档的快速提示,:help key-notation有关键/组合问题的更多详细信息以及...键表示法。

在您的情况下,:help ctrl-r_ctrl-w:help <c-r>_<c-w>(注意下划线(会对您有所帮助。

这是一个基于:grep的映射,应该做你想要的(有关更多信息,请参阅此处(:

map <buffer> <F3> :grep 'function.*<C-r><C-w>' %<CR><CR>

我从上面的所有答案和评论以及帮助文件中收集了信息,并编译了这个答案,因为没有人直接回答。我找到了两个解决方案:

1-我们可以yiw光标下复制单词,然后gg到文件的顶部。最后我们搜索" function <C-r>"这意味着,来自寄存器的函数空间内容"(最后的拉克(。副作用:如果什么也没找到,你现在在你的文件顶部,弄乱寄存器。:-/

nmap <Leader>8 yiwgg /function <C-r>"<CR>

阿拉伯数字-我的个人创作,是对问题中原始命令的更正:

nmap <Leader>8 /function <C-r><C-w><CR> Nn

不起作用,因为/命令抛出"未找到错误",这中止了其余的映射。因此,我们可以找到一种方法来忽略错误(我寻找但找不到(,或者使用:

:nmap <Leader>8 :call search('function <C-r><C-w>','w')<CR>

注意"w"标志,这意味着环绕!寻找:help search.


额外:

3-完美的世界right_way_to_do_it: 如果您的文件是有组织的或 ctag 的,请使用 gD

出于好奇,我使用了<Leader>8,因为 * 在 8 之上。 :)