Vim:如何在拆分窗口中跳转到定义

h4cxqtbf  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(198)

我想定义一个命令,gv,它跳转到一个分割窗口中的定义。我知道gd是跳转到定义的命令,但在现有的窗口中。
我尝试了以下Map:

nnoremap <silent> gv :vsplit<CR>gd

但是它不起作用。它在一个分割窗口中打开了完全相同的文件,而实际上没有跳到定义。看起来<CR>后面的gd命令被忽略了。我该如何修复这个问题?
我看到一些answers提到了<C-]>,但是有没有办法在不生成标记的情况下实现这个?
希望这是有意义的。提前感谢!

qjp7pelc

qjp7pelc1#

:help gd跳转到光标下单词的本地定义。“本地定义”总是在同一个缓冲区中 * 无论如何 * 所以我希望你不要期望它跳转到其他缓冲区。
您的Map:

nnoremap <silent> gv :vsplit<CR>gd

按预期工作,如下所示:窗口被分割并且光标跳到光标下的单词的本地定义:

第一次跳跃是用gd,第二次跳跃是用你的gv
如果你想要一个跨文件的“跳转到定义”,gdgD不是你想要的。请参见:help ctags:help cscope:help include-search。注意,这些特性并不是特别聪明。如果你想要比你更好地理解你的代码的东西,去别处看看。

5ktev3wc

5ktev3wc2#

实际上,您不需要为此定义新的Map/命令。如果您按CTRL-W d(或键入:dsp <word>),它将在新窗口中显示定义。

CTRL-W CTRL-D                   *CTRL-W_CTRL-D* *CTRL-W_d*
CTRL-W d        Open a new window, with the cursor on the first
            macro definition line that contains the keyword
            under the cursor.  The search starts from the
            beginning of the file.  If a count is given, the
            count'th matching line is jumped to.

然而,如果你真的想按gv并显示定义,romainl的解决方案的替代方案如下:

nnoremap gv :vertical dsplit <C-R><C-w><cr>

相关问题