Настройка редактора VIM

Предисловие

Что такое vim? Vim - это свободный терминальный текстовый редактор, созданный на основе более старого редактора Vi. Ныне это мощный текстовый редактор с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. автор редактора, Брам Моленар. Он активный член сообщества Open Source, основатель фонда ICCF Holland foundation, благотворительной организации, проводящей проект помощи детям из Уганды. Так же Брем является автором языка программирования Zimbu. На данный момент он работает в Google.

Первый выпуск редактора Vim произошёл 2 ноября 1991 года, а последняя версия выпущена 13 декабря 2019. На данный момент редактор Vim, является стандартным редактором практически на всех Unix операционных системах.

Редактор Vim оброс кучей заблуждений и легенд что он очень сложный в освоении, что с него невозможно выйти и тд. Наверно по этому самый популярный запрос в Google по поводу редактора Vim это: “Как выйти из Vim?”.

Установка Vim

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

Debian:

sudo apt-get install vim

Fedora:

sudo dnf install vim

(Для других Unix систем используйте команду своего пакетного менеджера для установки редактора)

Для операционный системы Windows просто установите exe под версию вашей системы и убедитесь что папка с Vim указана в PATH. Если в PATH не будет указан путь на папку Vim, вы не сможете запустить его из командной строки. Для проверки PATH в Windows 10 идём в “Параметры -> Система -> О программе”, Выбираем пункт “Дополнительные параметры системы”. В открывшемся окне выбираем “Переменные среды”, кликаем на PATH и смотрим чтобы был прописан путь к папке vim, если нет добавляем.

Вот и все, теперь достаточно ввести в терминале vim и начать работу с настройкой и кастомизацией редактора.

Настройка vim

Вся настройка редактора осуществляется редактированием главного конфига vimrc. Он находится в домашней директории пользователя.

Для Unix систем путь к конфигу выглядит так:

/home/username/.vimrc

Для Windows путь к конфигу выглядит так:

C:\Users\username\.vimrc

Для настройки и кастомизации vim мы будем работать только с этим файлом. Давайте посмотрим как редактор выглядит без каких либо настроек и кастомизаций.

vim

Для новеньких пользователей vim, такой интерфейс может показаться устрашающим и не понятным. Многие для того чтобы из него выйти, просто закрывают терминал. Но даже не обращают внимание что при открытии редактора, он сам показывает нам как можно из него выйти.

vim

Давайте приступим к настройке и добавим просты и банальные вещи в редактор, без которых не обойтись любому редактору в современное время. Создайте новый файл .vimrc, если такого нет в домашней директории вашего пользователя. Первый делом давайте добавим редактору возможность выводить номера строк. Это делается добавлением параметра:

set number

Сохраняем и перезапускаем редактор.

vim

Вот так уже намного удобнее, правда? Но это ещё не все. Vim славится не только свое скоростью работы, главное преимущество этого редактора это его горячие клавиши. Они продуманы таким образом, чтобы пользователь никогда не брал в руки мышь, а постоянно использовал клавиатуру. Но вот в чём проблема, этих горячих клавиш огромное количество. И всех их запомнить не так просто. Кроме всех существующих горячих клавиш, vim позволяет нам создавать свои и переназначать существующие. Но все таки я рекомендую научится пользоваться редактором с дефолтными горячими клавишами. Ведь в какой-то момент вы можете работать с редактором на машине без настроенного конфига. Это может стать для вас проблемой в использовании редактора. И так, добавление горячих клавиш происходит с помощью команды nnoremap. Синтаксис команды следующий: “nnoremap сочетание клавиш выполняемая команда”. Давайте добавим два хоткея, сохранения файла и выход из редактора. Для этого в конфиг добавим следующие строки:

nnoremap <C-q> :q<CR>
nnoremap <C-s> :w<CR>

Как и прошлый раз, сохраняем и перезапускаем редактор. Теперь при нажатии комбинации клавиш: “Ctrl + q” мы выйдем из редактора, а при нажатии “Ctrl + s” мы сохраним файл.

В редакторе есть ещё одна полезная функция о которой стоит знать, это вкладки. Работают они из коробки без каких либо плагинов и расширений. Создать новую вкладку можно командой:

:tabnew

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

vim

Перемещаться между вкладками происходит командами:

:tabnext
:tabprevious

Согласитесь, для перемещения между вкладками каждый раз вводить команду не очень удобно. Давайте исправим и добавим свои хоткеи на создание вкладок и перемещение между ними. Допишем в наш конфиг следующие строки:

nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
nnoremap <C-n> :tabnew<CR>

Таким образом на хоткей “Ctrl + n” мы добавим возможность создавать новую вкладку, а на хоткеи “Ctrl + стрелочка влево”, “Ctrl + стрелочка вправо” навигацию между вкладками. Это намного удобнее, не так ли? Но это ещё не все.

Менеджер плагинов Vundle

Благодаря стараниям сторонних разработчиков, для редактора vim было создано огромное количество плагинов и расширений. Для удобной работы с ними был создан менеджер плагинов Vundle. Он позволяем быстро и просто установить нужный плагин, тему и многое другое. С тем что умеет Vundle, можете ознакомится в описании репозитория на GutHub. Давайте приступим к его установке и настройке. Для начала убедитесь что у вас установлен Git. Так как вся работа Vundle, напрямую связана с ним. Приступим к установке. Для начала клонируем репозиторий Vundle в папку .vim которая находится в вашей домашней директории. Делается это следующей командой:

Unix

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Windows:

git clone https://github.com/VundleVim/Vundle.vim.git C:\Users\username\.vim\bundle\Vundle.vim

Теперь нам нужно настроить сам Vim чтобы дать ему понимание где хранится Vundle чтобы он его запустил и установил нужные плагины. Открываем конфиг и дописываем следующие строки:

Linux:

set nocompatible              
filetype off                  
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
call vundle#end()            " required
filetype plugin indent on    " required

Windows:

set nocompatible              
filetype off                  
set rtp+=$HOME/.vim/bundle/Vundle.vim/
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
call vundle#end()            " required
filetype plugin indent on    " required

Сохраняем и перезапускаем Vim. Вводим команду для установки стандартных плагинов:

:PluginInstall

Дожидаемся установки и перезапускаем редактор. Теперь для установки нового плагина нам нужно указать имя его репозитория и выполнить установку выше упомянутой командой. Все просто. Давайте приведем внешний вид редактора в более приятный глазу. Для этого установим пакет тем для Vim: vim-colorschemes. Это огромный пак тем. В нем каждый для себя найдет ту с которой сможет работать приятно. В конфиге, в списке плагинов, добавим следующую строчку и выполним установку командой :PluginInstall:

Plugin 'flazz/vim-colorschemes'

Теперь нам нужно указать какую именно тему мы хотим применить в нашем конфиге. Со всем списком тем, можно ознакомится в репозитории flazz/vim-colorschemes. Добавляем в конфиг следующую строчку:

colorscheme theme-name

Заключение

Для редактора Vim создано огромное количество тем и плагинов которые вы легко сможете найти если умеете пользоваться интернетом ;) Я показал вам базовые настройки и плагины, а их существует просто огромное количество. Возможно когда-то я соберу для вас топ тех плагинов для vim которые использую я лично. Под конец статьи как бонус выкладываю код моего личного конфига .vimrc. Я использую vim на Windows, для Linux нужно просто сменить путь к папке vundle. Мой редактор vim выглядит вот так:

vim

Видео на моём канале о настройке редактора VIM:

Вот мой .vimrc:

set nocompatible             
set number
filetype off                 
set laststatus=2
set noshowmode
set cmdheight=1
set updatetime=50
set rtp+=$HOME/.vim/bundle/Vundle.vim/
call vundle#begin('$HOME/.vim/bundle/')
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'git://git.wincent.com/command-t.git'
Bundle 'rstacruz/sparkup', {'rtp': 'vim'}
Plugin 'flazz/vim-colorschemes'
Plugin 'tpope/vim-surround'
Plugin 'itchyny/lightline.vim'
Plugin 'ryanoasis/vim-devicons'
Plugin 'vifm/vifm.vim'
Plugin 'dracula/vim', {'name':'dracula'}
Plugin 'chriskempson/base16-vim'
Plugin 'arcticicestudio/nord-vim'
Plugin 'jremmen/vim-ripgrep'
Plugin 'scrooloose/nerdtree'
call vundle#end()
filetype plugin indent on
set tabstop=4 
set shiftwidth=4
set smarttab
set expandtab
set softtabstop=4
set autoindent
let python_highlight_all = 1
set t_Co=256
autocmd BufWritePre *.py normal m`:%s/\s\+$//e ``
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
syntax on 
set termencoding=utf-8 
set novisualbell 
set t_vb= 
set backspace=indent,eol,start whichwrap+=<,>,[,]
set showtabline=1
set wrap
set linebreak
set nobackup
set noswapfile
set encoding=utf-8
set fileencodings=utf8,cp1251
set clipboard=unnamed
set ruler
set hidden
set visualbell t_vb=
set guifont=Monaco:h18
colorscheme OceanicNext
let g:lightline = {
      \ 'colorscheme': 'wombat',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste' ],
      \             [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
      \ },
      \ 'component_function': {
     \   'gitbranch': 'FugitiveHead',
     \   'filename': 'LightlineFilename',
      \ },
      \ }


function! LightlineFilename()
      return &filetype ==# 'vimfiler' ? vimfiler#get_status_string() :
              \ &filetype ==# 'unite' ? unite#get_status_string() :
              \ &filetype ==# 'vimshell' ? vimshell#get_status_string() :
              \ expand('%:t') !=# '' ? expand('%:t') : '[No Name]'
  endfunction

  let g:unite_force_overwrite_statusline = 0
  let g:vimfiler_force_overwrite_statusline = 0
  let g:vimshell_force_overwrite_statusline = 0
map <Leader>vv :Vifm<CR>
map <Leader>vs :VsplitVifm<CR>
map <Leader>sp :SplitVifm<CR>
map <Leader>tv :TabVifm<CR>
map <Leader>vv :Vifm<CR>
imap [ []<LEFT>
imap ( ()<LEFT>
imap { {}<LEFT>
let NERDTreeMinimalUI = 1
set cindent
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
nnoremap <C-n> :tabnew<CR>
nnoremap <C-q> :q<CR>
nnoremap <C-s> :w<CR>
map <C-f> :NERDTreeToggle<CR>