我想<leader>\
在以下情况下打开或关闭 NERDTree 和 Tagbar:
- 仅当 NERDTree 和 Tagbar 都打开时才关闭
- 如果 NERDTree 和 Tagbar 已关闭,或者如果其中一个已打开,则同时打开
到目前为止,在 VIMRC,我有:
nmap <leader>\ :NERDTreeToggle<CR> :TagbarToggle<CR>
这并不完全有效,因为如果一个打开,另一个关闭。它会打开一个关闭的,关闭一个打开的。
如何做到这一点?
我想<leader>\
在以下情况下打开或关闭 NERDTree 和 Tagbar:
到目前为止,在 VIMRC,我有:
nmap <leader>\ :NERDTreeToggle<CR> :TagbarToggle<CR>
这并不完全有效,因为如果一个打开,另一个关闭。它会打开一个关闭的,关闭一个打开的。
如何做到这一点?
您需要使用一个功能来检查插件窗口是否打开,然后采取相应措施。这应该可以工作,并且还会跳回到您开始的窗口:
function! ToggleNERDTreeAndTagbar()
let w:jumpbacktohere = 1
" Detect which plugins are open
if exists('t:NERDTreeBufName')
let nerdtree_open = bufwinnr(t:NERDTreeBufName) != -1
else
let nerdtree_open = 0
endif
let tagbar_open = bufwinnr('__Tagbar__') != -1
" Perform the appropriate action
if nerdtree_open && tagbar_open
NERDTreeClose
TagbarClose
elseif nerdtree_open
TagbarOpen
elseif tagbar_open
NERDTree
else
NERDTree
TagbarOpen
endif
" Jump back to the original window
for window in range(1, winnr('$'))
execute window . 'wincmd w'
if exists('w:jumpbacktohere')
unlet w:jumpbacktohere
break
endif
endfor
endfunction
nnoremap <leader>\ :call ToggleNERDTreeAndTagbar()<CR>
嗯...这在 vimrc 中对我有用
切换选项检查窗口是否已经存在,因此不需要自定义函数(@JanLarres 或贡献者之一)必须将其添加到 TagBar :D
" NERDTree
map <leader>n :NERDTreeToggle<CR>
" TagBar
map <leader>t :TagbarToggle<CR>