Как открыть или закрыть NERDTree и Tagbar с помощью ?
Я хочу <leader>
Открыть или закрыть NERDTree и Tagbar, при следующих условиях:
- только закрыть оба, если NERDTree и Tagbar открыты
- открыть оба, если NERDTree и Tagbar закрыты или если один уже открыт
Пока что в VIMRC у меня есть:
nmap <leader> :NERDTreeToggle<CR> :TagbarToggle<CR>
Который точно не работает, так как если один открыт, а другой закрыт. Она открывала ту, что была закрыта, и закрывала ту, что была открыта.
Как этого можно достичь?
2 ответа:
Вам нужно использовать функцию, которая проверяет, открыты ли окна плагина или нет, а затем действует соответствующим образом. Это должно сработать, и вы также вернетесь к окну, в котором вы начали:
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>