Использование vim в качестве (почти) полноценной IDE


На самом деле нет, vim не может заменить IDE, но путем установки ряда плагинов вполне возможно получить большую часть ее функционала: дерево файлов, подстветку синтаксиса, автозаполнение

Posted on 21 Sep 2020

Хотя в заголовке сказано vim, на самом деле в статье пойдет речь о neovim - его форке. Он совместим с оригинальным vim, но имеет ряд преемуществ. Установить можно стандартным системным способом. В случае Debian или Ubuntu это

$ sudo apt-get install neovim python3-neovim

Следующим шагом нужно установить менеджер плагинов. Их несколько, будем использовать vim-plug. Устанавливается одной командой

$ sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim \
  --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Теперь созданим простой конфигруационный файл:

$ nvim ~/.config/nvim/init.vim

И добавим в него следующие строки:

syntax enable
set nocompatible
set ruler
set number
set ts=2 sw=2 et smarttab
set encoding=utf8
set laststatus=2
set mouse=a

Здесь мы включили поддержку подстветки ситаксиса, нумерацию строк, задали размер табуляции = 2 и указали кодировку.

Следующим шагом нужно создать конфируацию vim-plug, которая по сути является списком плагинов для устновки

$ nvim ~/.vim/plugins.vim

Ниже мой список плагинов:

call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/syntastic'
Plug 'xuyuanp/nerdtree-git-plugin'
Plug 'altercation/vim-colors-solarized'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'sheerun/vim-polyglot'
Plug 'yggdroot/indentline'
Plug 'majutsushi/tagbar'
Plug 'craigemery/vim-autotag'
Plug 'tpope/vim-surround'

if has('nvim')
Plug 'Shougo/deoplete.nvim'
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
Plug 'honza/vim-snippets'
Plug 'ervandew/supertab'
Plug 'sirver/ultisnips'
Plug 'kien/ctrlp.vim'
Plug 'jceb/vim-orgmode'
Plug 'somini/vim-autoclose'
Plug 'ryanoasis/vim-devicons'
Plug 'neomake/neomake'

call plug#end()

Из них следует отметить nerdtree - отображение дерева кода, syntastic - поддержка синтаксиса многих языков, vim-colors-solarized - цветовая схема, vim-fugitive & vim-gituser - поддержка git, vim-airline - статусная строка, deoplete - автонаписание

Следующим шагом добавим в конец уже известного файла ~.config/neovim/init.vim следующую строку, чтобы подгрузить список плагинов

so ~/.vim/plugins.vim

Дальше нужно либо перезапустить neovim или перечитать конфигурацию командой :so % и запустить установку плагинов командой :PlugInstall. После этого можно дополнить vim.init конфиграцией плагинов

map <C-n> :NERDTreeToggle<CR>
nmap <F8> :TagbarToggle<CR>

set t_Co=256
set background=dark
colorscheme solarized

let g:solarized_termcolors=256
let g:gitgutter_enabled=1

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

" Vim-Airline Configuration
let g:airline#extensions#tabline#enabled = 1
"let g:airline_powerline_fonts = 1
"let g:airline_theme='hybrid'
"let g:hybrid_custom_term_colors = 1
"let g:hybrid_reduced_contrast = 1

" Syntastic Configuration
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 0

" Neomake settings
autocmd! BufWritePost * Neomake
"let g:neomake_elixir_enabled_makers = ['mix', 'credo', 'dogma']

" Vim-Supertab Configuration
let g:SuperTabDefaultCompletionType = "<C-X><C-O>"

" Vim-UtilSnips Configuration
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsEditSplit="vertical" " If you want :UltiSnipsEdit to split your window.

" deoplete
let g:deoplete#enable_at_startup = 1

В результате получается достаточно функциональная сборка neovim и хотя она не заменит полноценную IDE, но вполне годится для внесения небольших правок в код.