假设我正在编写一些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>
是什么!
答案 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之上。:)