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

时间:2012-07-30 22:49:44

标签: php vim

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

我设法通过使用nmap <Leader>8 /function <C-r><C-w><CR>来做到这一点,但问题是我的搜索包装是关闭的(我想要那样),所以有一半的时间我最终得到了屏幕错误的结束并且必须按N我自己向上看。我试图将Nn附加到映射的末尾(nmap <Leader>8 /function <C-r><C-w><CR>Nn),但它不起作用。我不知道为什么!事实上,我在<CR>之后所做的任何事情似乎都没有任何影响。

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

4 个答案:

答案 0 :(得分:1)

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

<C-r><C-w>^R^W的emacs表示法。我不知道在vi实现中emacs符号是做什么的,但确实如此。 :help ^R^W虽然有效。它只是在光标下插入单词。

答案 1 :(得分:1)

Vim可以使用gd原生地执行此操作,这意味着“转到定义”,这不仅限于功能。请参阅:help gd


在Vim的文档中,<C-r><C-w>符号在整个地方都被使用,并且或多或少是在讨论vim时编写组合的标准方法。 Emacs的标准符号为C-r C-w,没有<>

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

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

答案 2 :(得分:0)

以下是基于:grep的映射,应该按照您的意愿执行(有关详情,请参阅here):

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

答案 3 :(得分:0)

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

1- 我们可以复制yiw光标下的单词,然后gg复制到文件的顶部。最后,我们搜索“function <C-r>",这意味着,来自寄存器的功能空间内容”(最后一次)。副作用:如果找不到任何内容,您现在位于文件的顶部,会混乱寄存器。 : - /

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

2- 我的个人创作,是对问题中原始命令的修正:

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:    如果您的文件是有组织的或使用ctags,请使用gD

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