Vim – это очень сложный, но в то же время очень популярный текстовый редактор текста среди пользователей операционных систем Linux. Рассмотрим как настроить Vim.
Программа Vim позволяет перемещаться по тексту и выполнять большинство действий с помощью клавиатуры, это очень сильно ускоряет работу за компьютером, поэтому что вам не надо постоянно переносить руку на мышь и обратно.
В нескольких предыдущих статьях я рассказывал про основы работы с Vim и основные команды программы, сегодня же хочу поговорить о настройке и персонализации программы. Добавление нескольких строчек в конфигурационный файл может сделать Vim намного удобнее. Несмотря на то, что в тексте я буду писать Vi, речь будет идти про современную версию редактора – Vim.
Содержание статьи:
- Настройка редактора Vim
- 1. Отступы и нумерация строк
- 2. Внешний вид
- 3. Звук
- 4. Поддержка мыши
- 5. Настройка привязок
- 6. Буфер обмена
- 7. Настройка поиска
- 8. Команды
- 9. Плагины
- 10. Кодировка
- Выводы
Настройка редактора Vim
Основной конфигурационный файл Vim находится в папке /etc/. Это файл /etc/vimrc/vimrc. Коме того, для каждого отдельного пользователя можно настроить Vi с помощью локального конфигурационного файла, который находится в домашней папке ~/.vimrc. Вы можете использовать тот файл, который вам надо, например:
vim ~/.vimrc
Я рекомендую комментировать если не каждую строчку, то хотя бы каждую секцию, потому что если вы этого не будете делать, то потом не разберетесь что и зачем добавляли. Для комментария добавьте перед строкой символ кавычки – “.
1. Отступы и нумерация строк
Если вы собрались программировать в Vi, то вам надо обязательно разобраться с отступами. В стандартах многих языков программирования рекомендуется использовать пробелы вместо табов, а каждый отступ оформлять фиксированным количеством пробелов, например, стандарт Python PEP-8 рекомендует использовать четыре пробела. Чтобы это настроить добавьте такие строки:
set expandtab
set smarttab
set tabstop=4
set softtabstop=4
set shiftwidth=4
Переменная expandtab включает замену табов на пробелы, tabstop – количество пробелов в одном обычном табе, softtabstop – количество пробелов в табе при удалении, smarttab – при нажатии таба в начале строки добавляет количество пробелов равное shiftwidth.
Чтобы добавить нумерацию строк добавьте такую команду:
set number
Раз мы уже заговорили про отступы, давайте сделаем ещё небольшой отступ между левой частью окна:
set foldcolumn=2
2. Внешний вид
Для редактора доступно несколько цветовых схем. Вы можете посмотреть все доступные схемы открыв редактор и набрав там команду :colorscheme, затем пробел, а затем Tab:
Для выбора цветовой схемы на постоянной основе добавьте в конфигурационный файл такую строчку
colorscheme имя_цветовой_схемы
Например:
colorscheme delek
Для многих языков программирования есть подсветка синтаксиса, чтобы её включить добавьте:
syntax on
3. Звук
При нажатии неверной клавиши или ошибке в Vim проигрывается специальный звук. Если он вам мешает, его можно отключить:
set noerrorbells
set novisualbell
4. Поддержка мыши
Если вы работаете в графическом окружении, то, возможно, вам понадобиться поддержка мышки. Поддержка может быть добавлена в несколько режимов работы программы:
- n – обычный режим;
- v – визуальный режим (режим выделения);
- i – режим вставки;
- c – режим командой строки;
- a – все перечисленные ранее режимы;
- r – для режима “Нажмите Enter” или запроса ввода информации.
В большинстве случаев чтобы включить мышку во всех режимах программы достаточно добавить такую строчку:
set mouse=a
Также можно включить мышку только в визуальном режиме:
set mouse=v
Или вовсе её отключить:
set mouse=
При включённой поддержке мыши, вы все ещё можете копировать текст в системный буфер обмена, для этого просто зажмите клавишу Shift.
5. Настройка привязок
Очень полезная возможность Vim – это настройка своих привязок клавиш. Для этого существует функция map. Она похожа на alias в Linux и сообщает программе, что если мы вводим что-то, то хотим сделать ещё что-то. Здесь прежде чем переходить к настройке нужно понять как это работает. Синтаксис map простой:
map набор_символов_или_сочетание_клавиш на_что_заменить
Откройте редактор и выполните там команду:
:map losst <ESC>iHello world!<CR>
При вводе набора символов losst программа нажимает клавишу Esc, затем вводит i чтобы перейти в режим редактирования, потом пишет приветствие и добавляет символ перевода строки. Клавиши, которые надо нажать пишутся в скобках <>.
Мы рассмотрели общую команду map, но существуют также отдельные команды для других режимов:
- nmap – нормальный режим;
- vmap – визуальный режим;
- omap – режим, когда выбран оператор действия (y,p или d);
- cmap – режим командной строки;
- imap – режим вставки.
Кроме того есть не рекурсивный вариант команды. Например, если на слово Hello назначить ещё одну замену, то в нашем примере она сработает. Но в не рекурсивном варианте всё равно будет вставлено Hello. Не рекурсивные варианты команды тоже есть для всех режимов, это noremap, vnoremap, nnoremap, onoremap, cnoremap и inoremap.
Но это ещё не всё. В начале пользовательских привязок клавиш принято использовать клавишу <leader> по умолчанию это обратный слеш. Например, если сделать вот так:
:map <leader>losst <ESC>iHello world!<CR>
Тогда для выполнения этой привязки надо набрать losst. Использовать обратный слеш не всегда удобно, поэтому часто его заменяют на запятую. Для этого в конфигурационный файл надо добавить:
let mapleader = “,”
Теперь вы знаете как настроить привязки клавиш в vim и что это всё означает. Теперь можно добавить сочетание клавиш для быстрого сохранения:
nmap <leader>w :w!<cr>
Поиск дальше нажатием пробела:
map <space> /
Поиск предыдущего вхождения по нажатию Ctrl+Пробел:
map <C-space> ?
Более удобное перемещение между открытыми вкладками редактора:
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
Включение или отключение проверки орфографии:
map <leader>ss :setlocal spell!<CR>
Таким образом, вы можете сделать более удобным и быстрым любое действие в редакторе.
6. Буфер обмена
Vim использует специальный внутренний буфер обмена для копирования и вставки текста, он никак не связан с системным. Постоянная проблема пользователей Vim в графическом интерфейсе, это невозможность что-либо скопировать непосредственно из визуального режима Vim в системный буфер обмена. Если окно редактора пусто, нет никаких дополнительных настроек или плагинов, можно просто копировать текст из терминала, но если запустить vim в tmux или screen, то тут уже возникнет проблема. Она решается. В Vim существуют специальные регистры для системного буфера обмена, это + и *. К ним можно получить доступ с помощью клавиши “.
Но сначала надо убедится, что ваша версия Vim поддерживает работу с системным буфером обмена. Для этого выполните:
vim –version | grep clipboard
Если вы видите надпись +clipboard, значит всё хорошо. В противном случае надо искать другую версию vim. В Ubuntu или Debian для поддержки буфера обмена можно установить пакет vim-gtk:
sudo apt install vim-gtk
Теперь, когда вы нажмете “+y в визуальном режиме, выделенный текст будет скопирован в системный буфер обмена, а при нажатии “+p в обычном режиме, содержимое буфера обмена будет вставлено в позицию курсора. Для большего удобства можно добавить горячие клавиши:
inoremap <C-v> <ESC>”+pa
vnoremap <C-c> “+y
vnoremap <C-d> “+d
Теперь чтобы вставить из буфера vim будет достаточно нажать Ctrl+V, а для копирования в буфер обмена системы – Ctrl+C.
7. Настройка поиска
Давайте немного настроим поиск. Для того чтобы игнорировать регистр при поиске добавьте в конфигурационный файл:
set ignorecase
set smartcase
Подсвечивать результаты поиска:
set hlsearch
Чтобы программа подсказывала первое вхождение при вводе шаблона поиска добавьте:
set incsearch
8. Команды
Для сохранения, открытия нового файла в программе и выполнения многих других операций мы вводим команды. Но кроме предустановленных команд вы можете добавлять свои. Для этого используется такая конструкция:
command опции имя действие
В качестве действия может быть указано выполнение какой-либо команды, нажатие клавиш, как в случае с привязками или вызов какой-либо функции. Это очень обширная тема, поэтому я не буду трогать её в этой статье.
Добавьте такую строчку чтобы с помощью команды :W можно было сохранить файл, если он открыт не через sudo:
command! W execute ‘w !sudo tee % > /dev/null’ <bar> edit!
9. Плагины
Для Vim существует огромное количество различных плагинов и начиная с восьмой версии появилась своя система управления пакетами. Все пакеты должны располагаться в папке ~/.vim, подпапке pack/vendor/start или pack/vendor/opt. Файлы из подпапки start загружаются автоматически при старте программы, и из opt надо подгружать вручную.
Например, давайте установим такой популярный плагин, как NerdTree. Для этого просто склонируйте его с GitHub в эту папку:
git clone https://github.com/preservim/nerdtree.git ~/.vim/pack/vendor/start/nerdtree
После этого разработчики рекомендуют выполнить такую команду, чтобы загрузить старицы справки:
vim -u NONE -c “helptags ~/.vim/pack/vendor/start/nerdtree/doc” -c q
После этого вы можете запустить программу и набрать такую команду для активации панели выбора файлов:
:NERDTreeToggle
Можно добавить горячую клавишу на открытие панели, для этого добавьте в конфигурационный файл:
nmap <F6> :NERDTreeToggle<CR>
Установим для примера ещё один плагин, Vim , который позволяет выполнять unix команды прямо в командной строке редактора:
git clone https://tpope.io/vim/eunuch.git ~/.vim/pack/vendor/start/eunuch
Загрузка справки:
vim -u NONE -c “helptags ~/.vim/pack/vendor/start/eunuch/doc” -c q
Перезагрузите Vim и вы сможете пользоваться и этим плагином. Вообще, вы можете найти подробную инструкцию по установке любого нужного вам плагина на GitHub странице самого плагина.
10. Кодировка
Часто при открытии в Vim тестовых файлов с кириллическими символами, те отображаются неверно. Чтобы они отображались как надо следует выбрать кодировку UTF-8 по умолчанию:
set encoding=utf8
Также можно установить стандарт использования символов переноса строки в файлах:
set ffs=unix,dos,mac
В данном случае на первом месте находится вариант Unix, где для переноса строки используется только символ n.
Выводы
В этой статье я постарался детально разобрать как выполняется настройка Vim. Вы узнали о базовых переменных, которые надо установить чтобы изменить внешний вид, о привязках клавиш, а также о том как устанавливать плагины. К тому же у нас получился такой файл ~/.vimrc:
“Табы и пробелы
set expandtab
set smarttab
set tabstop=4
set softtabstop=4
set shiftwidth=4
“Нумерация строк и отступ
set number
set foldcolumn=2
“Цветовая схема
colorscheme delek
syntax on
“Без звука
set noerrorbells
set novisualbell
“Мышь
set mouse=a
“Привязки
let mapleader = “,”
nmap <leader>w :w!<CR>
map <space> /
map <C-space> ?
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
map <leader>ss :setlocal spell!<CR>
inoremap <C-v> <ESC>”+pa
vnoremap <C-c> “+y
vnoremap <C-d> “+d
“Поиск
set ignorecase
set smartcase
set hlsearch
set incsearch
“Выход с sudo
command! W execute ‘w !sudo tee % > /dev/null’ <bar> edit!
“Кодировка
set encoding=utf8
“Тип переноса
set ffs=unix,dos,mac
Даже этот небольшой конфигурационный файл уже может сильно помочь вам в работе, а дальше останется только расширять его дополнительными командами и привязками клавиш. А какие команды и привязки используете вы? Какие плагины? Поделитесь в комментариях!