标签列表和局部变量
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>
在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>