Настройка Vim
Vim — это очень сложный, но в то же время очень популярный текстовый редактор текста среди пользователей операционных систем Linux. Программа позволяет перемещаться по тексту и выполнять большинство действий с помощью клавиатуры, это очень сильно ускоряет работу за компьютером, поэтому что вам не надо постоянно переносить руку на мышь и обратно.
В нескольких предыдущих статьях я рассказывал про основы работы с Vim и основные команды программы, сегодня же хочу поговорить о настройке и персонализации программы. Добавление нескольких строчек в конфигурационный файл может сделать Vim намного удобнее. Несмотря на то, что в тексте я буду писать Vi, речь будет идти про современную версию редактора — Vim.
Настройка редактора Vim
Основной конфигурационный файл Vim находится в папке /etc/. Это файл /etc/vimrc/vimrc. Коме того, для каждого отдельного пользователя можно настроить Vi с помощью локального конфигурационного файла, который находится в домашней папке ~/.vimrc. Вы можете использовать тот файл, который вам надо, например:
Я рекомендую комментировать если не каждую строчку, то хотя бы каждую секцию, потому что если вы этого не будете делать, то потом не разберетесь что и зачем добавляли. Для комментария добавьте перед строкой символ кавычки — «.
1. Отступы и нумерация строк
Если вы собрались программировать в Vi, то вам надо обязательно разобраться с отступами. В стандартах многих языков программирования рекомендуется использовать пробелы вместо табов, а каждый отступ оформлять фиксированным количеством пробелов, например, стандарт Python PEP-8 рекомендует использовать четыре пробела. Чтобы это настроить добавьте такие строки:
set expandtab
set smarttab
set tabstop=4
set softtabstop=4
set shiftwidth=4
Переменная expandtab включает замену табов на пробелы, tabstop — количество пробелов в одном обычном табе, softtabstop — количество пробелов в табе при удалении, smarttab — при нажатии таба в начале строки добавляет количество пробелов равное shiftwidth.
Чтобы добавить нумерацию строк добавьте такую команду:

Раз мы уже заговорили про отступы, давайте сделаем ещё небольшой отступ между левой частью окна:
2. Внешний вид
Для редактора доступно несколько цветовых схем. Вы можете посмотреть все доступные схемы открыв редактор и набрав там команду :colorscheme, затем пробел, а затем Tab:

Для выбора цветовой схемы на постоянной основе добавьте в конфигурационный файл такую строчку
colorscheme имя_цветовой_схемы
Для многих языков программирования есть подсветка синтаксиса, чтобы её включить добавьте:
3. Звук
При нажатии неверной клавиши или ошибке в Vim проигрывается специальный звук. Если он вам мешает, его можно отключить:
set noerrorbells
set novisualbell
4. Поддержка мыши
Если вы работаете в графическом окружении, то, возможно, вам понадобиться поддержка мышки. Поддержка может быть добавлена в несколько режимов работы программы:
- n — обычный режим;
- v — визуальный режим (режим выделения);
- i — режим вставки;
- c — режим командой строки;
- a — все перечисленные ранее режимы;
- r — для режима «Нажмите Enter» или запроса ввода информации.
В большинстве случаев чтобы включить мышку во всех режимах программы достаточно добавить такую строчку:

Также можно включить мышку только в визуальном режиме:
Или вовсе её отключить:
При включённой поддержке мыши, вы все ещё можете копировать текст в системный буфер обмена, для этого просто зажмите клавишу Shift.
5. Настройка привязок
Очень полезная возможность Vim — это настройка своих привязок клавиш. Для этого существует функция map. Она похожа на alias в Linux и сообщает программе, что если мы вводим что-то, то хотим сделать ещё что-то. Здесь прежде чем переходить к настройке нужно понять как это работает. Синтаксис map простой:
map набор_символов_или_сочетание_клавиш на_что_заменить
Откройте редактор и выполните там команду:
:map losst iHello world!

При вводе набора символов losst программа нажимает клавишу Esc, затем вводит i чтобы перейти в режим редактирования, потом пишет приветствие и добавляет символ перевода строки. Клавиши, которые надо нажать пишутся в скобках <>.
Мы рассмотрели общую команду map, но существуют также отдельные команды для других режимов:
- nmap — нормальный режим;
- vmap — визуальный режим;
- omap — режим, когда выбран оператор действия (y,p или d);
- cmap — режим командной строки;
- imap — режим вставки.
Кроме того есть не рекурсивный вариант команды. Например, если на слово Hello назначить ещё одну замену, то в нашем примере она сработает. Но в не рекурсивном варианте всё равно будет вставлено Hello. Не рекурсивные варианты команды тоже есть для всех режимов, это noremap, vnoremap, nnoremap, onoremap, cnoremap и inoremap.
Но это ещё не всё. В начале пользовательских привязок клавиш принято использовать клавишу по умолчанию это обратный слеш. Например, если сделать вот так:
:map losst iHello world!
Тогда для выполнения этой привязки надо набрать \losst. Использовать обратный слеш не всегда удобно, поэтому часто его заменяют на запятую. Для этого в конфигурационный файл надо добавить:
Теперь вы знаете как настроить привязки клавиш в vim и что это всё означает. Теперь можно добавить сочетание клавиш для быстрого сохранения:
Поиск дальше нажатием пробела:
Поиск предыдущего вхождения по нажатию Ctrl+Пробел:
Более удобное перемещение между открытыми вкладками редактора:
Включение или отключение проверки орфографии:
map ss :setlocal spell!
Таким образом, вы можете сделать более удобным и быстрым любое действие в редакторе.
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 в обычном режиме, содержимое буфера обмена будет вставлено в позицию курсора. Для большего удобства можно добавить горячие клавиши:
Теперь чтобы вставить из буфера vim будет достаточно нажать Ctrl+V, а для копирования в буфер обмена системы — Ctrl+C.
7. Настройка поиска
Давайте немного настроим поиск. Для того чтобы игнорировать регистр при поиске добавьте в конфигурационный файл:
set ignorecase
set smartcase
Подсвечивать результаты поиска:

Чтобы программа подсказывала первое вхождение при вводе шаблона поиска добавьте:
8. Команды
Для сохранения, открытия нового файла в программе и выполнения многих других операций мы вводим команды. Но кроме предустановленных команд вы можете добавлять свои. Для этого используется такая конструкция:
command опции имя действие
В качестве действия может быть указано выполнение какой-либо команды, нажатие клавиш, как в случае с привязками или вызов какой-либо функции. Это очень обширная тема, поэтому я не буду трогать её в этой статье.
Добавьте такую строчку чтобы с помощью команды :W можно было сохранить файл, если он открыт не через sudo:
command! W execute ‘w !sudo tee % > /dev/null’ 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
После этого вы можете запустить программу и набрать такую команду для активации панели выбора файлов:

Можно добавить горячую клавишу на открытие панели, для этого добавьте в конфигурационный файл:
Установим для примера ещё один плагин, 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 по умолчанию:
Также можно установить стандарт использования символов переноса строки в файлах:
В данном случае на первом месте находится вариант 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 w :w!
map /
map ?
map j
map k
map h
map l
map ss :setlocal spell!
inoremap «+pa
vnoremap «+y
vnoremap «+d
«Поиск
set ignorecase
set smartcase
set hlsearch
set incsearch
«Выход с sudo
command! W execute ‘w !sudo tee % > /dev/null’ edit!
«Кодировка
set encoding=utf8
«Тип переноса
set ffs=unix,dos,mac
Даже этот небольшой конфигурационный файл уже может сильно помочь вам в работе, а дальше останется только расширять его дополнительными командами и привязками клавиш. А какие команды и привязки используете вы? Какие плагины? Поделитесь в комментариях!
Где находятся директория .vim и файл .vimrc?
Где находится директория временных профилей?
Доброго времени суток. У меня создаются на сервере 2008 R2 временные пользователи из-за ошибки.

Где находится директория хранения заголовочных файлов
Здравствуйте, где находятся стандартные подключаемые файлы? Нужно сделать обычный модуль,без.
Где находится корневая директория для метода open?
необходимо считать текстовый файл пытаюсь InputStream is = getAssets().open("1.txt"); но в самом.
Файл или Директория?
Всем день добрый. Ребята подскажите есть ли такая функция которая определяет, что ей дали в.
Почетный модератор
7391 / 2637 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
destroymol, не надо его находить. Сам создаешь в хоме и вим все подхватит.
Добавлено через 30 секунд
директорию .vim тоже сам создай.
Vim (Русский)
Состояние перевода: На этой странице представлен перевод статьи Vim. Дата последней синхронизации: 29 июня 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Vim — консольный текстовый редактор, являющийся расширенной версией vi с дополнительными функциями, которые включают в себя: подсветку синтаксиса, полноценную систему помощи, встроенную поддержку скриптов (vimscript), визуальный режим для простоты выделения и сравнение файлов (vimdiff).
Установка
Установите один из следующих пакетов:
- vim — с поддержкой Python 2/3, Lua, Ruby и Perl, но без поддержки GTK/X.
- gvim — идентичен vim , но c поддержкой GTK/X.
- Пакет vim собран без поддержки Xorg; отсутствует компонент +clipboard , поэтому Vim не сможет оперировать с основным и обменным буфером. Пакет gvim предоставляет доступ также и к Vim с интерфейсом командной строки, но с поддержкой +clipboard
- Неофициальный репозиторий herecura предоставляет несколько версий Vim/gVim: vim-cli , vim-gvim-common , vim-gvim-gtk , vim-gvim-qt , vim-rt and vim-tiny .
Использование
Также вы можете запустить vimtutor (для версии с интерфейсом командной строки) или gvimtutor (для версии с графическим интерфейсом) для отображения руководства по использованию Vim.
Vim включает в себя широкую справочную систему, доступ к которой можно получить посредством :h субъект . Субъекты включают в себя команды, опции, горячие клавиши, плагины и так далее. Используйте команду :h (без какого-либо субъекта), чтобы полчуить информацию о вспомогательной системе и о том, как перемещаться между субъектами.
Настройка
Файл конфигурации Vim для конкретного пользователя расположен в домашней директории — ~/.vimrc , файлы текущего пользователя в ~/.vim/ . Общий файл конфигурации — ~/.vimrc , а общие файлы находятся в /usr/share/vim/ .
Примечание: Более ли менее стандартное поведение — например, подсветка синтаксиса — определяется в defaults.vim , который загружается, когда отсутствует ~/.vimrc . Добавьте let skip_defaults_vim=1 в /etc/vimrc для полного отключения загрузки defaults.vim . [1]
Буфер обмена
Такие команды Vim как :yank или :paste работают с безымянным регистром, который по умолчанию соответствует регистру «* . Если доступна +clipboard , то регистр «* отображается в PRIMARY буфер в X.
Чтобы изменить стандартный регистр на «+ , используйте :set clipboard=unnamedplus . Регистр «+ соответствует CLIPBOARD буферу в X.
Для более подробной информации смотрите :help ‘clipboard’ .
Совет: Для копирования и вставки могут быть созданы горячие клавиши. Смотрите, например, [2] для ctrl+c , ctrl+v и ctrl+x .
Подсветка синтаксиса
Чтобы включить подсветку синтаксиса для многих языков программирования:
:filetype plugin on :syntax on
Отступы
Отступы для определенного типа файла:
:типфайла indent on
Визуальный перенос
Опция wrap (включена по умолчанию) указывает Vim переносить длинные строки, которые не помещаются на экран, так, что оставшаяся часть строки отображается на следующей линии. Опция wrap влияет только на отображение текста, сам текст при этом не изменяется.
Изначально перенос строки происходит ровно в том месте, где размещается последний ее символ, поместившийся на экране, даже если он находится в середине слова. Для более умного переноса используйте опцию linebreak . Когда эта опция включена командой set linebreak , перенос строки происходит только после символов, которые перечислены в опции breakat , которая по умолчанию содержит в себе пробел и некоторые знаки препинания (смотрите :help breakat ).
Остаток строки обычно начинается с начала следующей линии, без всякого отступа. Опция breakindent сообщает Vim, что необходимо отображать перенесенный остаток строки с отступом, так, что на всех последующих линиях перенесенные части строки имеют тот же отступ, что и начало этой строки. Поведение breakindent может быть настроено при помощи опции breakindentopt . Например, для файлов исходного кода на языке Python может быть полезно добавлять дополнительный отступ в 4 пробела для перенесенных частей длинной строки (подробнее смотрите в :help breakindentopt ):
autocmd FileType python set breakindentopt=shift:4
Использование мыши
Vim позволяет пользоваться мышью, но только в тех терминалах, которые это поддерживают:
- xterm/urxvt
- Консоль linux с gpm (смотрите подробнее на странице Console mouse support)
- PuTTY
Чтобы включить поддержку мыши, добавьте в ~/.vimrc :
set mouse=a
Опция mouse=a устанавливается в defaults.vim
Примечание: Копирование/вставка будут использовать регистр «* , если есть доступ к X серверу; смотрите раздел #Буфер обмена. xterm по-прежнему может обрабатывать нажатия мыши, когда зажат shift .
Переход на новую строку с помощью клавиш со стрелками
По умолчанию, при нажатии ← в начале строки или → в конце, курсор не переводится на следующую/предыдущую строку.
Это можно исправить с помощью добавления строки set whichwrap=b,s,,[,] в ваш файл ~/.vimrc .
Объединение файлов
Vim включает в себя diff-редактор (программа, которая отображает различия между двумя файлами и позволяет удобно их объединять). Используйте vimdiff для этого — просто укажите ей пару файлов: vimdiff файл1 файл2 . Ниже приведен список команд vimdiff.
| Действие | Горячая клавиша |
|---|---|
| следующие изменение | ]c |
| предыдущее изменение | [c |
| diff obtain | do |
| diff put | dp |
| развернуть блок | zo |
| свернуть блок | zc |
| перечитать файлы | :diffupdate |
| переключить окна | Ctrl+w+w |
Советы и рекомендации
Нумерация строк
Чтобы включить отображение номера столбца, используйте :set number . По умолчанию показываются абсолютные значения номеров строк, относительные включаются посредством :set relativenumber .
Переход к новой строке осуществляется посредством :line number или line numbergg . Все переходы запоминаются в лист переходов, для более подробной информации смотрите :h jump-motions .
Проверка орфографии
Проверку орфографии в Vim можно включить с помощью:
set spell
По умолчанию установлен только английский словарь. Другие словари можно найти в официальных репозиториях по запросу vim-spell . Еще больше словарей можно найти в FTP-архиве Vim. Словари необходимо поместить в каталог для словарей — ~/.vim/spell/ . Включить словарь можно командой :setlocal spell spelllang=ru_yo (заменив ru_yo на имя нужного словаря).
| Действие | Команда |
|---|---|
| следующая ошибка | ]s |
| предыдущая ошибка | [s |
| предложения для исправления | z= |
| добавить правильное написание | zg |
| добавить правильное написание (на сеанс) | zG |
| добавить неправильное написание | zw |
| добавить неправильное написание (на сеанс) | zW |
| повторить проверку орфографии во всем файле | :spellr |
- Чтобы включить проверку сразу для двух языков (например, английского и русского), добавьте set spelllang=en,ru в ~/.vimrc или /etc/vimrc и перезапустите Vim.
- Вы можете включить проверку орфографии для конкретных типов файлов (например .txt), используя плагин FileType и собственное правило для определения типа файла. Чтобы включить проверку орфографии для всех файлов, оканчивающихся на .txt, создайте файл /usr/share/vim/vimfiles/ftdetect/plaintext.vim и вставьте туда строку: autocmd BufRead,BufNewFile *.txt setfiletype plaintext . Далее, вставьте строку autocmd FileType plaintext setlocal spell spelllang=ru в файл ~/.vimrc или /etc/vimrc и перезапустите Vim. Или поместите строку autocmd BufRead,BufNewFile *.txt setlocal spell в ~/.vimrc или /etc/vimrc и перезапустите Vim. Не забудьте отредактировать строчку (specifically *.txt ), чтобы включить соответствующие типы файлов для проверки орфографии.
- Чтобы включить проверку орфографии только для документов LaTeX (или TeX), добавьте autocmd FileType tex setlocal spell spelllang=ru в файл ~/.vimrc или /etc/vimrc и перезапустите Vim.
Сохранение позиции курсора
Если вы хотите, чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в ~/.vimrc :
augroup resCur autocmd! autocmd BufReadPost * call setpos(".", getpos("'\"")) augroup END
Запуск Vim по команде vi
Создайте псевдоним для vi на vim .
Если вы хотите, чтобы при вводе sudo vi запускался vim , то установите пакет vi-vim-symlink AUR , который удалит vi и заменить его символической ссылкой на vim .
Возврат каретки DOS/Windows
Если вы видите последовательность ^M в конце каждой линии, это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. Дело в том, что в Linux для переноса принято использовать один символ новой строки (LR), тогда как в системах Windows/MS DOS для той же цели используется последовательность из двух символов: возврата каретки (CR) и новой строки (LR). Как раз эти символы возврата каретки и отображаются в виде ^M .
Для удаления всех символов возврата каретки из файла, выполните:
Обратите внимание, что ^ здесь — управляющий символ, а не обычный. Чтобы ввести управляющую последовательность ^M , нажмите Ctrl+v,Ctrl+m .
Также вы можете просто установить пакет dos2unix и исправлять файлы командой dos2unix файл .
Примечание: Другой простой способ заключается в изменении опции fileformat . Используйте set ff=unix для преобразования файлов с окончанием строки DOS/Windows в файлы с окончанием строки Unix. Для того, чтобы сделать обратное, просто используйте set ff=dos .
Пустое пространство в нижней части окон gVim
Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.
Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в ~/.vimrc :
set guiheadroom=0
Примечание: Установив значение 0, вы не сможете видеть горизонтальную полосу прокрутки внизу окна.
Плагины
Плагины могут помочь повысить эффективность вашей работы в Vim. Они могут менять интерфейс Vim, добавлять новые команды, поддержку завершения кода, интеграцию других программ и утилит с Vim, поддержку дополнительных языков и многое другое.
Совет: For a list of popular plugins, see Vim Awesome)
Установка
Используя встроенную систему управления пакетами
В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в ~/.vim/pack/foo .
Используя менеджер плагинов
Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.
- Vundle — в настоящее время наиболее популярный менеджер плагинов Vim.
- Vim-plug — минималистичный менеджер плагинов для Vim, который имеет много особенностей, например, загрузка плагинов по запросу и параллельное обновление.
- pathogen.vim — простой плагин для управления переменной runtimepath.
- Dein.vim — менеджер плагинов, заменяющий NeoBundle, доступен как vim-dein-gitAUR .
Из репозиториев Arch
Группа vim-plugins объединяет множество разнообразных плагинов. Используйте команду pacman -Sg vim-plugins для отображения списка пакетов, которые вы можете затем установить, используя pacman.
cscope
Cscope является инструментом для навигации по программному проекту. Путем перехода к слову/символу/функции и вызову cscope (обычно с помощью горячих клавиш) можно найти: функции, которые вызывают данную, определение функции и многое другое.
Скопируйте стандартный файл cscope, который Vim будет автоматически читать:
Примечание: Вам наверное понадобится откомментировать следующие строки в ~/.vim/plugin/cscope_maps.vim , чтобы включить горячие клавиши cscope в Vim 7.x:
set timeoutlen=4000 set ttimeout
Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):
cd /путь/к/каталогу/проекта find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files
Создание файлы базы данных, которые cscope будет читать:
cscope -bq
Примечание: cscope ищет файл cscope.out в рабочем каталоге, поэтому тот же каталог следует использовать и для навигации по проекту в Vim. Также, вы можете указать путь до этого файла явно, установив его в переменной окружения $CSCOPE_DB .
Горячие клавиши по умолчанию:
Ctrl-\ и c: найти функции вызывающие эту функцию d: найти функции вызываемые этой функцией e: найти egrep паттерн f: найти этот файл g: найти это определение i: найти файлы, включающие этот файл (#include) s: найти этот символ Си t: найти присвоения
Не стесняйтесь изменять горячие клавиши:
#Maps ctrl-c to find functions calling the function nnoremap :cs find c =expand(«»)
Taglist
Taglist отображает структуру файлов исходного кода и позволяет эффективно просматривать исходники на различных языках программирования.
Полезные опции можно записать в ~/.vimrc :
let Tlist_Compact_Format = 1 let Tlist_GainFocus_On_ToggleOpen = 1 let Tlist_Close_On_Select = 1 nnoremap :TlistToggle
Смотрите также
Официальные ресурсы
Руководства
- vim Tutorial and Primer
- vi Tutorial and Reference Guide
- Graphical vi-Vim Cheat Sheet and Tutorial
- Vim Introduction and Tutorial [устаревшая ссылка 2020-08-06 ⓘ]
- Open Vim — Коллекция средств обучения Vim.
- Learn Vim Progressively
- Learning Vim in 2014
- Seven habits of effective text editing
- Basic Vim Tips
Видео
- Vimcasts — Скринкаст в формате .ogg.
- Vim Tutorial Videos — От основ к продвинутым темам.
Игры
Конфигурация
- nion
- Детальная конфигурация от Amir Salihefendic [устаревшая ссылка 2020-08-06 ⓘ]
- Bart Trojanowski
- Steve Francia’s Vim Distribution
- Vim Awesome — Vim Plugins
- Конфигурация Vim W4RH4W
- Fast vimrc/colorscheme from askapache
- Базовый vimrc
- Usevim
Цвета
- Vivify
- Vim colorscheme customization
Основы конфигурации Vim
После изучения Vim for Beginners, вы видели, что относительная нумерация строк не сохраняется после выхода из Vim. Однако данную опцию мы можем указать в файле конфигурации Vim.
Файл .vimrc
Вся информация о настройках Vim располагается в файле .vimrc, находящийся у вас в домашней директории. Вы можете открыть его в Vim, при помощи команды для редактирования файлов.
:e ~/.vimrc
Этот файл пустой, так как он ещё не был использован. Данный туториал покажет вам, как им пользоваться.
Комментарии
До того как вы добавите какой-либо код, вы должны указать, что он делает. Возможно вы знаете, что делаете в данный момент, но ситуация изменится спустя месяц. Всегда комментируйте код, таким образом, когда вы вернетесь к нему, перед вашими глазами всегда будет напоминание за что он отвечает.
Для файла .vimrc, всё, что находится после двойных кавычек, до конца строки, не используется. Следовательно, вы можете писать таким образом для себя пометки, чтобы вспомнить, что вы делали.
set number "This turns on line numbering
Теперь вы будите всегда знать, что команда set number включает нумерацию строк.
Опции и Переменные
Включить нумерацию строк и сделать её относительной, можно добавив в файл .vimrc:
set number "This turns on line numbering
set relativenumber "This turns on relative numbering
Сохраните это и вам больше не придется думать об этих настройках. Каждый раз при открытии файла Vim будет показывать относительную нумерацию строк. Команда set включает одну из опций Vim. Выключить настройку можно указав ей противоположную опцию. Перед противоположной опцией ставится no, в отличии от обычной опции.
Используйте следующий пример, для отключения относительной нумерации, вместе с обычной нумерацией.
set nonumber "This turns off line numbering
set norelativenumber "This turns off relative numbering
Не ставьте оба set’а, которые мы рассматривали в .vimrc. Это включит опцию и тут же её выключит. Скоро, я покажу вам, как делать это более программным путем.
Если вам известно текущее состояние опции, переключение опции, может быть альтернативным вариантом установки необходимой опции. Переключить её можно посредством ! после названия опции. Это включит/выключит опцию:
set number! "This toggles the value of number
set relativienumber! "This toggles relative line numbers
Если же хочется узнать текущее значение опции, используйте ? после названия опции, например
set number?
Это вернёт нам number. Теперь, с этой информацией, вы всегда сможете узнать состоянии интересующей вас опции.
Если вы хотите изменить количество колонок, которое занимает нумерация на экране, вы можете присвоить значение опции numberwidth. Данный пример установит нумерацию в 4 колонки шириной:
set numberwidth=4 "Set the line numbers to 4 spaces
Посмотрите сколько места подойдет вам для нумерации и добавьте данную опцию в ваш .vimrc.
Если вам понадобится создать переменную, используйте выражение let. К примеру:
let name = "Richard Guay" "Set my name in to the name variable
Когда сохраните это в файле .vimrc (используйте свое имя в качестве значения переменной), можно отобразить его в режиме командной стоки с помощью :echo name

Поставив перед опцией префикс &, с ней можно обращаться, как с переменной. Показать значение опции можно таким образом:
:echo &numberwidth
Команда echo используется исключительно для переменных, но указав префикс & перед опцией, тем самым мы сообщаем Vim, что хотим взаимодействовать с данной опцией, как с переменной. Теперь, удобно производить над значением опции различные математические операции. Следовательно, чтобы увеличить ширину нумерации на одну колонку, можно воспользоваться следующим примером:
:let &numberwidth = &numberwidth + 1
echo &numberwidth должно показать значение 5.
Все переменные имеют свою область видимости. Чтобы определить область видимости, нам нужно указать букву, :, и имя переменной. Неопределенная область видимости считается глобальной. Перечислим области видимости:
| b: | Область видимости буфера—Переменная будет доступна только в текущем буфере |
| w: | Область видимости окна—Доступна только внутри текущего окна |
| t: | Область видимости вкладки—Доступна на текущей вкладке |
| g: | Глобальная область видимости — Доступна везде |
| I: | Локальная область видимости—Переменная доступна локально, для функции в которой была определена |
| s: | Область видимости скрипта—Переменная является локальной, только для текущего скрипта |
| a: | Область видимости аргумента—Переменная будет доступна только внутри функции |
| v: | Глобальная область видимости—Используется для переменных определённых и используемых Vim |
Правильное определение переменной в глобальной области видимости, будет выглядеть так:
let g:name = "Richard Guay" "Set my name in to the name variable
Получаем информацию
Теперь когда вы знаете, как установить опции и определить переменные, вы, возможно, задаётесь вопросом: «Как найти различные опции?». Поискать в сети, одна из возможностей, но вся нужная информация находится в самом Vim. Напишите:
:set all
И Vim покажет все доступные опции в программе. Напечатав :let и нажав enter, покажет все переменные.
Команда :help используется для поиска по обширной документации встроенной в Vim. Чтобы выйти из :help, воспользуйтесь :q. В режиме help, вы не выйдите из программы, однако это переключит редактор в командный режим.
Функции
Функции очень полезны в файле .vimrc. Так как конфигурационные файлы Vim используют полноценный язык программирования, с этого момента, я буду называть его своим настоящим именем: VimScript.
Для определения функции в VimScript, используйте:
function function name>()
function body>
endfunc
Мне нравится обычная нумерация и относительная нумерация, но бывают моменты, когда относительную нумерация не нужна. Каждый раз печатать полную команду :set norelativenumber или даже :set relativenumber!, утомительно. Нам бы пригодилась функция для включения и выключения.
function TRelative()
set relativenumber!
endfunc
Вызвать функцию можно командой :call.
:call TRelative()
Команда function не позволяет вам переписать уже существующую функцию. Если эта функция уже где-то была определена, или вы попробовали перезагрузить файл, Vim покажет ошибку и перестанет обрабатывать файл на этом месте. Команду function! позволяет переписать функцию без ошибок. Это хорошая практика в VimScript, всегда использовать function!.
Чтобы выключить нумерация, можно создать функцию, также есть возможность создать функцию, которая будет делать противоположное. Добавьте это в ваш .vimrc:
function! NoNumber()
set nonumber
set norelativenumber
endfunc
function! Numbers()
set number
set relativenumber
endfunc
Для передачи параметров функции, вам нужно указать имя переменной внутри скобок. К примеру:
function! Hi( name )
echo "Hello" a:name
endfunc
При вызове функции вам нужно передать аргумент. Теперь когда вы вызовите функцию с именем, вы получите следующий результат:
:call Hi( "Richard" )
Hello Richard
Основы настройки клавиш
Одна из самых полезный возможностей файла конфигурации — установить нужные вам действия, при нажатии каких-либо клавиш на клавиатуре. Приведём пример, вы часто переключаете относительную нумерацию строк. Чтобы не печатать :call TRelative каждый раз, использование горячей клавиши будет гораздо быстрее. Для этого нам пригодится команда map
map :call TRelative()
С этой строкой в файле .vimrc, если нажать Control-T, относительная нумерация будет включаться и выключаться. Попробуйте теперь сами, установить клавишу для переключения обычной нумерации.
Настроить подобного рода клавиши можно не только для командного режима, но и для всех остальных. Если вы укажите префикс с первой буквой необходимого режима, в вашем распоряжении будет горячая клавиша именно для данного режима. nmap устанавливает клавиши для командного режима. vmap клавиши для визуального режима. imap для текстового режима.
Теперь когда вы узнали эти команды, забудьте их. Эти команды могут быть опасны. Если вы, снова переопределите клавишу, будет использоваться новая клавиша, которая может создать бесконечный цикл в настройках.
Чтобы предотвратить подобного рода ситуацию, вы должны добавить nore после режима и до map. Следовательно, nmap станет nnoremap, vmap станет vnoremap, и imap станет inoremap. Тем самым вы всегда будите ссылаться на сочетание клавиш, которое стоит по умолчанию. Эти команды гораздо безопаснее использовать в конфигурационном файле.
Заключение
В этом уроке я показал вам основы создания конфигурационного файла в Vim. Я показал как: комментировать код в этом файле, включать/выключать опции и определять переменные, создавать функции и настраивать горячие клавиши. Лучше способ запомнить пройденный материал — использовать полученные знания на практике.