2016-05-14 7 views
1

, поскольку у нас есть возможность иметь терминал внутри буфера неовима. Я очень хотел бы иметь способ «переключать» буфер, содержащий терминал, и иметь его в фиксированной позиции, например, в нижней части экрана.toggle neovim terminal buffer, как плагин nerdtree

Я знаю, что nerdtree делает это для меня, он переключается с привязкой клавиш, чтобы всегда появляться в левой части экрана. то, что я хочу, совпадает с терминальным буфером в неовиме. Есть ли кто-нибудь, кто знает о плагине вроде этого или как я его создам?

ответ

2

У меня может быть решение для вас. Приведенный ниже код переключает терминал на дальнем левый с 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> 
+0

Спасибо! Это на самом деле работает несколько! Я пытаюсь заставить его начать работу для дна, но он отказывается переключать, он открывает новое окно буфера. Я изменил строку: «topleft vnew» для «botright new» любые идеи? – Kristoffer

+0

Команда также добавляет много буферов [No name] – Kristoffer

+0

Я не очень хорошо знаком с удаленными окнами, но я бы подумал, что вы можете использовать 'windo' здесь. Отправьте команду ко всем окнам и сохраните 'winnr()' для окна, которые являются терминальными буферами для глобальной переменной. Затем переключитесь в это окно и сделайте материал из моей функции. – jonathf

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 
+0

Мне нравится это лучше, однако он по-прежнему генерирует много этих пустых буферов. – Kristoffer

1

Это мое решения для тех, кто хочет скрыть/показать единственное оконечное окно 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>