Автозапуск Vim с Vexplore и терминалом

Автозапуск Vim с Vexplore и терминалом

Я хочу настроить vim так, чтобы он вел себя как традиционная ide по большей части. Я бы хотел, чтобы при вводе команды vim он открывался следующим образом:

окно Vim

Проблема в том, что он открывается следующим образом:

демо vim

Я хотел бы, чтобы терминал запускался автоматически, но в предыдущем окне. Я пытался читать документацию, но я не слишком хорошо разбираюсь в том, как читать документацию и вставлять ее в код, большая часть кода в моем vimrc скопирована и вставлена, а некоторые основы я уже знал. Я хотел бы, чтобы он запускался автоматически, как на первой картинке.

Также, еще один вопрос, я не уверен, возможно ли это в vim, иногда в NetRW, когда я щелкаю вдали, буфер стирает дерево каталогов, а затем появляется пустой буфер. Есть ли способ отключить определенные команды, чтобы они не мешали буферу терминала и списку дерева каталогов? Например, если я пытаюсь открыть файл, а последний буфер был буфером терминала, он спросит меня, хочу ли я сохранить текущий буфер (терминал) и открыть файл, я бы хотел, чтобы было умнее открыть его в буфере нетерминала, а не в терминале. По сути, игнорирование терминала вообще, кроме ввода команд.

Вот мой vimrc, возможно, беспорядочный, так как я ничего не делал, только копировал и вставлял:

set mouse=a
set number
imap jj <Esc>
set autochdir
map <Tab> <C-W>W:cd %:p:h<CR>:<CR>
map <C-l> :q!<CR>
map <C-t> :term bash<CR>
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')

" Make sure you use single quotes

" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'

" Any valid git URL is allowed
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Using a non-master branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'

" Initialize plugin system
call plug#end()


function! NetrwOpenMultiTab(current_line,...) range
   " Get the number of lines.
   let n_lines =  a:lastline - a:firstline + 1

   " This is the command to be built up.
   let command = "normal "

   " Iterator.
   let i = 1

   " Virtually iterate over each line and build the command.
   while i < n_lines
      let command .= "tgT:" . ( a:firstline + i ) . "\<CR>:+tabmove\<CR>"
      let i += 1
   endwhile
   let command .= "tgT"

   " Restore the Explore tab position.
   if i != 1
      let command .= ":tabmove -" . ( n_lines - 1 ) . "\<CR>"
   endif

   " Restore the previous cursor line.
   let command .= ":" . a:current_line  . "\<CR>"

   " Check function arguments
   if a:0 > 0
      if a:1 > 0 && a:1 <= n_lines
         " The current tab is for the nth file.
         let command .= ( tabpagenr() + a:1 ) . "gt"
      else
         " The current tab is for the last selected file.
         let command .= (tabpagenr() + n_lines) . "gt"
      endif
   endif
   " The current tab is for the Explore tab by default.

   " Execute the custom command.
   execute command
endfunction

" Define mappings.
augroup NetrwOpenMultiTabGroup
   autocmd!
   autocmd Filetype netrw vnoremap <buffer> <silent> <expr> t ":call NetrwOpenMultiTab(" . line(".") . "," . "v:count)\<CR>"
   autocmd Filetype netrw vnoremap <buffer> <silent> <expr> T ":call NetrwOpenMultiTab(" . line(".") . "," . (( v:count == 0) ? '' : v:count) . ")\<CR>"
augroup END

" Toggle Vexplore with Ctrl-E
function! ToggleVExplorer()
  if exists("t:expl_buf_num")
      let expl_win_num = bufwinnr(t:expl_buf_num)
      if expl_win_num != -1
          let cur_win_nr = winnr()
          exec expl_win_num . 'wincmd w'
          close
          exec cur_win_nr . 'wincmd w'
          unlet t:expl_buf_num
      else
          unlet t:expl_buf_num
      endif
  else
      exec '1wincmd w'
      Vexplore
      let t:expl_buf_num = bufnr("%")
  endif
endfunction

" NeTRW Explorer Settings

let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 4
let g:netrw_altv = 1
let g:netrw_winsize = 15
augroup ProjectDrawer
  autocmd!
  autocmd VimEnter * :Vexplore
augroup END
map <silent> <C-n> :Vexplore<CR>

" Per default, netrw leaves unmodified buffers open. This autocommand
" deletes netrw's buffer once it's hidden (using ':q', for example)
autocmd FileType netrw setl bufhidden=delete
autocmd TabNew * call feedkeys(":Vexplore\<CR>", 'n')

" terminal split below
set splitbelow
autocmd VimEnter * :term bash

решение1

Вместо этого используйте эту автокоманду:

autocmd VimEnter *
    \ Vexplore |
    \ execute "wincmd l" |
    \ rightbelow term bash

Это выполнит всю последовательность один раз, как только вы войдете в Vim. Я использую продолжения строк (последующие строки начинаются с обратной косой черты) и полосы для запуска нескольких команд. Обратите внимание также, что это autocmdзапускает команды Ex, поэтому предварять команды с помощью :не обязательно.

Первая команда откроет окно NERDTree слева, как и ожидалось.

Во-вторых, wincmd lпереместится в окно справа (см. :help :wincmd). Это шаг, которого не хватает в вашей попытке, из-за чего следующий шаг разделяет NERDTree, а не главное окно. Должен wincmdзапускаться внутри execute, потому что в противном случае он попытается интерпретировать , |который следует за ним, что перестанет работать как разделитель.

Наконец, последняя команда открывает терминал, используя явное rightbelow(см. :help :rightbelow) открытие этого разделения внизу. Вот и все!

Связанный контент