在 VIM 中使用taglist
插件时,我们可以使用Ctrl
+]
跳转到全局变量或函数。但是,如果变量是本地变量,则无法在标签中找到。我从这个链接gd
中发现,我们可以通过 using或全局变量 using跳转到局部变量gD
。
由于这超出了 taglist 命令的范围,我们不能使用Ctrl
+t
返回到我们跳转的地方。
taglist
如果找不到标签,是否可以增强跳转到局部变量?然后用栈返回到跳出的地方?
这是一个映射。因为 Taglist 插件实际上并没有这样定义(它只提供当前缓冲区的标签显示,并设置标签),因此不需要与它集成。
nnoremap <silent> <C-]> :<C-u>let pos = [bufnr('')] + getpos('.')<Bar>execute 'normal!' (v:count ? v:count : '') . "\<lt>C-]>"<CR>:if pos == [bufnr('')] + getpos('.')<Bar>execute 'normal! gd'<Bar>endif<CR>
这首先记录当前缓冲区和光标位置,然后尝试执行正常的标记跳转。如果位置没有改变,我们回退到gd
命令。哦,其实我们不需要检查位置,可以用try...catch
代替。版本 2:
nnoremap <silent> <C-]> :<C-u>try<Bar>execute 'normal!' (v:count ? v:count : '') . "\<lt>C-]>"<Bar>catch /^Vim\%((\a\+)\)\=:E426:/<Bar>execute 'normal! gd'<Bar>endtry<CR>