4

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

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

4

4 回答 4

7

对于任何想要隐藏/显示任何高度的单个 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>
于 2017-05-31T00:11:37.180 回答
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>
于 2016-05-15T13:11:52.443 回答
2

我认为这一定比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
于 2016-11-26T18:10:30.837 回答
1

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

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

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

于 2018-06-09T14:28:03.740 回答