Допиливание Vim

· vim

Vim — отличный редактор, позволяющий очень быстро выполнять рутинные операции с текстом. Однако для комфортной работы Vim требует базовой настройки и периода привыкания. В данной заметке я приведу список изменений, которые позволят комфортно использовать Vim для любых операций, а не только для редактирования различных файлов настроек.

Перечень тем:

  • создание файла настроек .vimrc;
  • установка менеджера плагинов;
  • корректная работа с переключение раскладки;
  • установка набора сниппетов для более быстрого редактирования кода и разметки;
  • добавление проверки орфографии;
  • применение темы оформления;
  • корректный перенос текста.

Все настройки я буду описывать применительно к Ubuntu 16.04.

Создание файла настроек

Первым делом нам нужно создать файл настроек редактора, если такового еще нет. Именно в нем мы будем прописывать наши настройки.

Открываем Vim и выполняем:

:e ~/.vimrc
:r $VIMRUNTIME/vimrc_example.vim
:w

Файл настроек создан.

Установка менеджера плагинов

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

Установим менеджер плагинов Vim-plug:

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Корректное переключение раскладки

Главная проблема Vim для русскоязычных пользователей — постоянная необходимость переключать раскладку при работе с текстом.

Решений этой проблемы как минимум три.

Самый простой вариант прописать в .vimrc:

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯЖ;ABCDEFGHIJKLMNOPQRSTUVWXYZ:,
фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

Проблема с этим вариантом в том, что для пунктуации маппинг не работает.

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

Самый радикальный же вариант (он же самый сложный) подробно описан тут. Здесь я приведу его краткую версию для Ubuntu.

Установка xkb-switch

Нам понадобится выполнить следующие команды:

$ git clone https://github.com/ierton/xkb-switch
$ cd xkb-switch
$ sudo apt-get install build-essential cmake libx11-dev libxext-dev libxtst-dev libxkbfile-dev
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

Проверяем работу программы:

$ xkb-switch

Если все хорошо и программа выполняется, то переходим к настройке Vim.

До этого мы не настраивали менеджер плагинов, который установили ранее. Этим и займемся.

Настройка Vim

Открываем .vimrc и пишем внизу:

call plug#begin('~/.vim/plugged')

Plug 'lyokha/vim-xkbswitch'

let g:XkbSwitchEnabled = 1
let g:XkbSwitchIMappings = ['ru']

call plug#end()

Сохраняем изменения, выполнив :w.

Применяем новый конфиг:

:so ~/.vimrc

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

:PlugInstall

После завершений устновки выходим из окна, нажав q. Можно вовсе закрыть Vim, выполнив ZZ.

Проверка работы плагина

Открываем Vim. Входим в режим вставки, нажав i.

Переключаем раскладку на русскую и вводим текст. Нажимаем ESC. Видим, что раскалдка после нажатия ESC переключилась на английскую автоматически. Теперь, если мы снова войдем в режим редактирования, то менять раскладку на русскую уже не нужно. Очень удобно.

Установка сниппетов

Сниппеты — это маленькие кусочки кода, которые работают как аналог шаблонов кода в NetBeans.

Установка расширений

В .vimrc прописываем над call plug#end():

Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" 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>"

Сохраняем файл, применяем конфигурацию и выполняем :PlugInstall.

Сами правила для сниппетов можно посмотреть на странице плагина.

Для разыменовывания сниппета нажимаем Tab, для перемещения по доступным для заполнения местам вперед и назад жмем Ctrl+b и Ctrl+z.

Проверка работы

Создаем файл:

$ vim test.sh

Входим в режим вставки и вводим #!. Жмем Tab и видим, что конструкция разыменовалась в #!/bin/bash.

Проверка орфографии

Подробная инструкция есть, например, здесь. Ниже краткие выдержки.

Идем на специальный сервер и берем оттуда файлы ru.utf-8.spl и ru.utf-8.sug.

Файлы нам нужно скопировать в папку ~/.vim/spell.

Теперь настроим Vim. В .vimrc пишем:

:setlocal spell spelllang=ru_ru,en_us

Или для поклонников буквы «ё» можно прописать:

:setlocal spell spelllang=ru_yo,en_us

Команды по работе со словарями хорошо описаны по ссылке выше. Вот их краткий перечень:

  • ]s — устанавливает курсор на следующее выделенное слово
  • [s — устанавливает курсор на предыдущее выделенное слово.

  • zg — добавляет слово, находящееся под курсором;

  • zG — то же, что и zg, но слово будет добавлено только для текущей сессии работы;

  • zw — то же, что и zg, однако слово будет помечено как ошибочно-написанное;

  • zW — то же, что и zw, однако слово будет добавлено только для текущей сессии работы.

  • zug и zuw — отменяет действие zg и zw соответственно;

  • zuG и zuW — отменяет действие zG и zW соответственно.

Смена темы оформления

Энтузиастами сделано много тем оформления для Vim. Мне нравится Afterglow — порт одноименной темы из Sublime Text.

Для установки темы в .vimrc пропишем перед call plug#end():

Plug 'danilo-augusto/vim-afterglow'

Сохраняем файл, применяем новую версию настроек и устанавливаем плагин.

Теперь прописываем в конце файла .vimrc:

colorscheme afterglow

Сохраняем изменения, применяем новые настройки. Оформление должно измениться.

Если оформление не изменилось, то возможно в терминале установлена восьмицветовая схема. Можно дописать в .vimrc следующее:

set t_Co=256

Изменения нужно сохранить и применить новые настройки.

Корректный перенос текста

Изначально Vim переносит текст по буквам. Это неудобно для редактирования текстов. Для переноса текста по словам, нужно прописать в .vimrc:

set wrap linebreak

Заключение

Vim — очень гибкий редактор, который каждый может приспособить под свои нужды. В данном случае я рассматривал Vim как редактор «по умолчанию», который можно использовать как для редактирования кода, так и для написания небольших текстов вроде постов в блог.

Вообще Vim можно приспособить под разные нужды и использовать, например, для таких вещей как навигация по файлам и их массовое переименование, но эти темы выходят за рамки заметки.