因为我们可以选择在neovim缓冲区内设置一个终端。我非常希望有一种方法来“切换”包含终端的缓冲区,并使其出现在固定位置,例如屏幕底部。
我知道nerdtree为我做了这件事,它用一个键绑定来切换,总是出现在我的屏幕左侧。我希望的是与neovim中的终端缓冲区相同。是否有人知道这样的插件或我将如何创建一个插件?
答案 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
需要选择终端缓冲区关闭!