2

假设我正在编写一些 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

4 回答 4

1

向前搜索你使用/和向后搜索你使用?. 因此,只需?在现有地图中使用 . 而不是/.

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

于 2012-07-30T23:11:07.037 回答
1

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>(注意下划线)会帮助你。

于 2012-07-31T05:40:05.850 回答
0

这是一个基于:grep它的映射应该做你想要的(更多信息请参见这里):

map <buffer> <F3> :grep 'function.*<C-r><C-w>' %<CR><CR>
于 2012-07-31T17:42:27.343 回答
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:gD如果您的文件是有组织的或 ctags 则使用。

出于好奇,我<Leader>8之所以使用 * 是因为 8 的顶部。:)

于 2012-07-31T21:15:26.040 回答