像nerdtree插件一样切换neovim终端缓冲区

时间:2016-05-14 22:10:45

标签: vim-plugin nerdtree neovim

因为我们可以选择在neovim缓冲区内设置一个终端。我非常希望有一种方法来“切换”包含终端的缓冲区,并使其出现在固定位置,例如屏幕底部。

我知道nerdtree为我做了这件事,它用一个键绑定来切换,总是出现在我的屏幕左侧。我希望的是与neovim中的终端缓冲区相同。是否有人知道这样的插件或我将如何创建一个插件?

4 个答案:

答案 0 :(得分:3)

我可能会为您提供解决方案。下面的代码使用f4按钮切换最左侧的终端:

let g:term_buf = 0
function! Term_toggle()
  1wincmd w
  if g:term_buf == bufnr("")
    setlocal bufhidden=hide
    close
  else
    topleft vnew
    try
      exec "buffer ".g:term_buf
    catch
      call termopen("bash", {"detach": 0})
      let g:term_buf = bufnr("")
    endtry
    startinsert!
  endif
endfunction
nnoremap <f4> :call Term_toggle()<cr>

答案 1 :(得分:2)

这是我想要隐藏/展示任何高度的单个neovim终端窗口的人的解决方案。

终端将在插入模式下显示在最底部。如果您想更改拆分行为,只需将botright new编辑为其他内容即可。 :help opening-window

let g:term_buf = 0
let g:term_win = 0

function! Term_toggle(height)
    if win_gotoid(g:term_win)
        hide
    else
        botright new
        exec "resize " . a:height
        try
            exec "buffer " . g:term_buf
        catch
            call termopen($SHELL, {"detach": 0})
            let g:term_buf = bufnr("")
        endtry
        startinsert!
        let g:term_win = win_getid()
    endif
endfunction


nnoremap <M-t> :call Term_toggle(10)<cr>
tnoremap <M-t> <C-\><C-n>:call Term_toggle(10)<cr>

答案 2 :(得分:1)

我认为这一定比IDE更好一点,

let g:term_buf = 0
function! Term_toggle()
  1wincmd w
  if g:term_buf == bufnr("")
    setlocal bufhidden=hide
    close
  else
    rightbelow new
    12winc -
    try
      exec "buffer ".g:term_buf
    catch
      call termopen("bash", {"detach": 0})
      let g:term_buf = bufnr("")
    endtry
    set laststatus=0
    startinsert!
  endif
endfunction
nnoremap <f4> :call Term_toggle()<cr>

" Terminal go back to normal mode
tnoremap <Esc> <C-\><C-n>
" When switching to terminal windows it goes into insert mode automatically
au BufEnter * if &buftype == 'terminal' | :startinsert | endif

答案 3 :(得分:0)

一个简单的解决方案,但它会删除缓冲区:

nnoremap <silent> <F3> :split term://zsh <CR>
tnoreamp <silent> <F3> <C-\><C-n> :bd! <CR>
autocmd TermOpen * startinsert

需要选择终端缓冲区关闭!