在VIM中使用taglist
插件时,我们可以使用Ctrl
+ ]
跳转到全局变量或函数。但是,如果变量是本地变量,则无法在变量中找到。我从link发现我们可以使用gd
或使用gD
的全局变量跳转到局部变量。
由于这超出了taglist命令的范围,我们无法使用Ctrl
+ t
返回我们跳过的地方。
如果没有找到标记,是否可以增强taglist
跳转到局部变量?然后使用堆栈返回到它跳出的地方?
答案 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>