标签列表和局部变量

taglist and local variable

在VIM中使用taglist插件时,我们可以使用Ctrl + ]跳转到全局变量或函数。但是,如果变量是本地变量,则无法在标签中找到它。我从这个 link 中发现我们可以使用 gd 跳转到局部变量或使用 gD.

跳转到全局变量

因为这超出了 taglist 命令的范围,我们不能使用 Ctrl + t 来 return 回到我们跳转的地方。

是否可以增强 taglist 以在找不到标签的情况下跳转到局部变量?然后利用栈return回到跳出的地方?

这是一个映射。因为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>