taglist和局部变量

时间:2016-09-12 13:03:08

标签: vim taglist

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

由于这超出了taglist命令的范围,我们无法使用Ctrl + t返回我们跳过的地方。

如果没有找到标记,是否可以增强taglist跳转到局部变量?然后使用堆栈返回到它跳出的地方?

1 个答案:

答案 0 :(得分:1)

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