6

我想<leader>\在以下情况下打开或关闭 NERDTree 和 Tagbar:

  1. 仅当 NERDTree 和 Tagbar 都打开时才关闭
  2. 如果 NERDTree 和 Tagbar 已关闭,或者如果其中一个已打开,则同时打开

到目前为止,在 VIMRC,我有:

nmap <leader>\ :NERDTreeToggle<CR> :TagbarToggle<CR>

这并不完全有效,因为如果一个打开,另一个关闭。它会打开一个关闭的,关闭一个打开的。

如何做到这一点?

4

2 回答 2

15

您需要使用一个功能来检查插件窗口是否打开,然后采取相应措施。这应该可以工作,并且还会跳回到您开始的窗口:

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>
于 2011-07-08T13:19:11.653 回答
-1

嗯...这在 vimrc 中对我有用

切换选项检查窗口是否已经存在,因此不需要自定义函数(@JanLarres 或贡献者之一)必须将其添加到 TagBar :D

" NERDTree
map <leader>n :NERDTreeToggle<CR>

" TagBar
map <leader>t :TagbarToggle<CR>
于 2014-04-23T12:45:33.490 回答