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または寄稿者の1人)がウィンドウをTagBarに追加していない必要があります:D

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

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