РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ VIM - Брам Мооленаар

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

05.1    Файл vimrc
05.2    Пример файла vimrc с пояснениями
05.3    Простые привязки кнопок
05.4    Добавление внешнего модуля
05.5    Добавление файла справки
05.6    Окно опций
05.7    Часто используемые опции

Следующая глава: Использование подсветки синтаксиса
Предыдущая глава: Внесение небольших изменений
Содержание: Руководство пользователя Vim


05.1 Файл vimrc

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

Если вы не знаете, где находится ваш файл vimrc, то воспользуйтесь следующей командой:

:scriptnames

Один из первых файлов в списке будет называться ".vimrc" или "_vimrc" и он будет расположен в вашем домашнем каталоге.

Если у вас еще нет файла vimrc, то см. vimrc, чтобы выяснить, как его создать.  Кроме того, в выводе команды ":version" также есть упоминание о "пользовательском файле vimrc", который ищет Vim.

В Unix всегда используется следующий файл:

~/.vimrc

В системах MS-DOS и MS-Windows чаще всего используется один из следующих файлов:

$HOME\_vimrc
$VIM\_vimrc

Файл vimrc может содержать все команды, начинающиеся с двоеточия. Наиболее простые из них устанавливают те или иные опции. Например, если вам хочется, чтобы Vim всегда запускался с включённой опцией 'incsearch', то добавьте в ваш файл vimrc следующую строку:

set incsearch

Для того, чтобы эта строка начала работать, необходимо выйти из Vim и заново запустить его. Позднее мы научимся это делать без выхода из Vim.

В этой главе объясняются только самые основные вещи. Более подробно о написании файла сценария Vim читайте здесь: Написание сценариев Vim.


05.2 Пример файла vimrc с пояснениями

В первой главе было показано, как примерный файл vimrc, включённый в пакет Vim может быть использован для запуска Vim в несовместимом режиме (см. несовместимость). Этот файл можно найти здесь:

$VIMRUNTIME/vimrc_example.vim ~

В этом разделе мы покажем как использовать различные команды в этом файле. В итоге у вас появится представление о том, как создавать собственные настройки. Тем не менее здесь не будет дано подробных пояснений, для этого можно воспользоваться командой ":help".

set nocompatible

Как уже говорилось в первой главе, руководство подразумевает, что вы работаете с Vim в улучшенном режиме, который не всегда совместим с Vi. Для этого прежде всего необходимо выключить опцию 'compatible' указанной выше командой.

set backspace=indent,eol,start

Эта опция определяет где в режиме Вставки кнопка <BS> может удалять символ перед курсором. Перечисленные через запятую значения позволяют Vim удалять пробелы в начале строки, символы переноса строки и символ, перед которым был осуществлён переход в режим Вставки.

set autoindent

Эта опция указывает Vim, что надо использовать отступ предыдущей строки для вновь созданной строки. Таким образом, перед новой строкой образуется то же самое количество пробелов, как и на предыдущей строке. Например, при нажатии <Enter> в режиме Вставки или при использовании команды "o" для открытия новой строки.

if has("vms")
  set nobackup
else
  set backup
endif

Это позволяет Vim оставлять резервную копию файла при записи, за исключением системы VMS, которая всегда хранит старые версии самостоятельно. Резервная копия файла имеет то же самое имя, что и оригинал, с добавлением "~". См. Резервные копии файлов.

    set history=50

Хранить в истории 50 команд и 50 шаблонов для поиска. Если вы пожелаете запоминать меньше или больше строк, то можно поставить другое число.

set ruler

Линейка позволяет всегда показывать текущее положение курсора в нижнем правом углу экрана Vim.

set showcmd

Показывать незавершённую команду в правом нижнем углу экрана Vim, слева от линейки. Например, при наборе "2f", Vim ожидает ввода символа, который требуется найти и показывает "2f". После нажатия "w" выполняется команда "2fw" и "2f" исчезает с экрана.

+-------------------------------------------------+
|текст в экране Vim                  |
|~                          |
|~                          |
|-- ВИЗУАЛЬНЫЙ РЕЖИМ --         2f     43,8   17% |
+-------------------------------------------------+
^^^^^^^^^^^               ^^^^^^^^ ^^^^^^^^^^
 'showmode'           'showcmd'  'ruler'
set incsearch

Показывает соответствие шаблону поиска во время набора шаблона.

map Q gq

Определяет привязку кнопки. Подробнее об этом говорится в следующем разделе. В данном случае определяется, что команда "Q" выполняет форматирование при помощи оператора "gq". Именно так это работало до Vim 5.0. В противном случае команда "Q" начинает режим Ex, но он вам вряд ли потребуется.

vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>

Это также привязка, но более сложная. Мы не будем здесь объяснять как она работает, но смысл её заключается в следующем: "p" в Визуальном режиме переписывает выбранный текст вклеенным при помощи этой команды. Как видите, привязки могут делать довольно сложные вещи, оставаясь при этом всего-навсего последовательностью команд, исполняемых как если бы вы их сами набрали на клавиатуре.

if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif

Эти команды включают подсветку синтаксиса на терминалах, где есть поддержка цвета. Опция 'hlsearch' заставляет Vim подсвечивать соответствия последнему шаблону поиска. Команда "if" очень полезна для установки опций при соблюдении определённых условий. Подробнее об этом написано в Операторы и перемещения.

filetype plugin indent on    

Это позволяет включить три интеллектуальных механизма:

1. Определение типа файла В начале редактирования файла Vim пытается определить с каким типом файла он работает. Если вы редактируете "main.c", то Vim определит по расширению ".c", что перед ним файл типа "c". Если вы редактируете файл, начинающийся с "#!/bin/sh", то Vim распознает, что это файл сценария оболочки "sh". Определение типа файла используется для подсветки синтаксиса и двух других операций, которые рассматриваются ниже. См. Типы файлов.
2. Использование модулей для файлов определённого типа Файлы различных типов удобно редактировать с различными опциями. Например, при редактировании файлов типа "c" очень полезно включить опцию 'cindent' для автоматического форматирования отступов строк. Такие часто употребляемые опции описаны в файлах модулей для различных типов файлов. Вы также можете написать свой собственный модуль для любого типа файла, см. Написание модуля типа файла.
3. Использование файлов форматирования отступов При редактировании исходных текстов программ отступ строки часто может быть вычислен автоматически. В Vim имеется набор правил для вычисления отступов для некоторых типов файлов. См. :filetype indent on и 'indentexpr'.
autocmd FileType text setlocal textwidth=78

Эта команда заставляет Vim переносить строки, если они становятся длиннее 78 символов, для файлов, которые были определены как обычный текст. В команде фактически две части. "autocmd FileType text" является автокомандой, определяющей, что последующая команда выполняется всякий раз, когда тип файла определён как "обычный текст". "setlocal textwidth=78" присваивает опции 'textwidth' значение 78 для данного файла.

autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

Ещё одна автокоманда. В данном случае она выполняется после чтения файла. Сложный набор команд после неё ищет, если была определена отметка '" и осуществляет прыжок к этой отметке.  Обратная косая черта в начале строки используется для продолжения команды с предыдущей строки, чтобы строка не была слишком длинной. См. продолжение строки. Этот синтаксис работает только в файле сценария Vim, но не в командной строке.


05.3 Простые привязки кнопок

Привязка позволяет вам повесить серию команд Vim на единственную кнопку. Предположим, что вам требуется часто выполнять операцию помещения отдельных слов в фигурные скобки, т.е. заменять слово вроде "количество" на слово "{количество}". При помощи команды :map вы можете указать Vim что для этой цели следует использовать кнопку F5. Сама команда выглядит так:

:map <F5> i{<Esc>ea}<Esc>

Замечание: При наборе этой команды вы должны вводить <F5> буквально, путём ввода четырёх символов на клавиатуре. <Esc> также вводится в пять символов, а не нажатием кнопки <Esc>. Помните об этом при чтении данного руководства!

Давайте разберёмся, что происходит, по порядку:

<F5> Функциональная кнопка F5 будет использована для запуска последующей серии команд.
i{<Esc> Вставить символ {. <Esc> прекращает режим Вставки.
e Переместиться к концу слова.
a}<Esc> Добавить } в конце слова.

После того, как вы выполните команду ":map", всё что требуется сделать для того, чтобы заключить слово в фигурные скобки, это подвести курсор к первому символу слова и нажать F5.

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

Одним из символов, которые полезно использовать с привязками, является обратная косая черта. Поскольку вам вероятно захочется определить несколько привязок, то добавьте еще какой-нибудь символ. Например, вы можете определить, что "\p" будет добавлять скобки вокруг слова, а "\c" будет добавлять фигурные скобки. Например:

:map \p i(<Esc>ea)<Esc>
:map \c i{<Esc>ea}<Esc>

Вам потребуется набирать \ и p достаточно быстро друг за другом, чтобы Vim понимал, что они связаны друг с другом.

Команда ":map" без аргументов показывает список текущих привязок, как минимум для Обычного режима. Подробнее о привязках читайте в разделе 40.1.


05.4 Добавление внешнего модуля

Функциональность Vim может быть расширена за счёт внешних модулей. Модулем является сценарий Vim, который подгружается автоматически при запуске Vim. Добавить модуль можно поместив соответствующий файл сценария в каталог plugin. {возможность отсутствует, если Vim был собран без особенности |+eval|}

Существует два типа модулей:

общие модули: Используются для всех типов файлов
модули типа файла: Используются только для определённых типов файла                 

Сначала мы обсудим общие модули, а затем рассмотрим модули типов файла.

ОБЩИЕ МОДУЛИ

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

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

  1. Найти требуемый модуль.
  2. Поместить его в правильный каталог.
ГДЕ ВЗЯТЬ НУЖНЫЙ МОДУЛЬ ОБЩЕГО НАЗНАЧЕНИЯ?

Где найти необходимые модули?

  • Некоторые модули включены в поставку Vim. Посмотрите в каталоге $VIMRUNTIME/macros и его подкаталогах
  • Загрузите требуемые модули из сети, полезный адрес: https://vim.sf.net.
  • Иногда исходные тексты модулей пробегают в рассылке Vim.
  • Модуль можно написать самостоятельно. См. Написание модулей.
ИСПОЛЬЗОВАНИЕ ОБЩЕГО МОДУЛЯ

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

Система каталог модулей  ~
Unix ~/.vim/plugin/
PC и OS/2 $HOME/vimfiles/plugin или $VIM/vimfiles/plugin
Amiga s:vimfiles/plugin
Macintosh $VIM:vimfiles:plugin
Mac OS X ~/.vim/plugin/
RISC-OS Choices:vimfiles.plugin

Пример для Unix (предположим, что у вас пока нет каталога для модулей):

mkdir ~/.vim
mkdir ~/.vim/plugin
cp /usr/local/share/vim/vim60/macros/justify.vim ~/.vim/plugin

Вот и всё! Теперь вы можете использовать команды, определённые в этом модуле для выравнивания текста по обоим краям.

МОДУЛИ ТИПА ФАЙЛА

Vim распространяется с набором модулей для ряда типов файлов, которые можно начать использовать при помощи команды

filetype plugin on

Вот и всё, что для этого требуется. См. vimrc filetype.

Если у вас нет модуля для какого-то определённого типа файла, или вы нашли более качественный модуль, то можете его добавить в свою систему. для этого нужно:

  1. Получить копию модуля.
  2. Поместить её в правильный каталог.
ГДЕ ВЗЯТЬ МОДУЛЬ ТИПА ФАЙЛА?

Там же, где берутся общие модули. Посмотрите, если есть указание типа файла, то это модуль типа файла. Сценарии в $VIMRUNTIME/macros являются общими, а модули типов файла находятся в $VIMRUNTIME/ftplugin.

ИСПОЛЬЗОВАНИЕ МОДУЛЯ ТИПА ФАЙЛА

Модули типов файла добавляются копированием в необходимый для этого каталог. Он находится там же, где и каталог для модулей общего назначения, но называется "ftplugin". Предположим, у вас есть модуль для типа файла "stuff" и вы работаете на Unix. Тогда вам нужно поместить этот файл в каталог ftplugin:

mv thefile ~/.vim/ftplugin/stuff.vim

Если такой файл уже существует, то значит у вас уже есть модуль для типа файла "stuff". Проверьте, не конфликтует ли существующий модуль с модулем, который вы хотите добавить. Если всё в порядке, то вы можете присвоить новому модулю другое имя:

mv thefile ~/.vim/ftplugin/stuff_too.vim

Символ подчёркивания используется для отделения названия типа файла от остальной части имени, которая может быть чем угодно. Название "otherstuff.vim" не будет работать, поскольку такой файл будет загружаться для типа файла "otherstuff".

На MS-DOS нельзя использовать длинные имена файлов. Если тип файла содержит более шести символов, то при добавлении дополнительного модуля у вас возникнут проблемы. Для решения проблем такого рода можно использовать подкаталог:

mkdir $VIM/vimfiles/ftplugin/fortran
copy thefile $VIM/vimfiles/ftplugin/fortran/too.vim

В общем случае, имена для модулей типа файла следующие:

ftplugin/<filetype>.vim
ftplugin/<filetype>_<name>.vim
ftplugin/<filetype>/<name>.vim

В качестве "<name>" можно использовать любое имя. Например, для типа файла "stuff" на Unix:

~/.vim/ftplugin/stuff.vim
~/.vim/ftplugin/stuff_def.vim
~/.vim/ftplugin/stuff/header.vim

Часть имени <filetype> это название типа файла, для которого будет применяться данный модуль. Только файлы данного типа будут использовать настройки, взятые из модуля. <name> не имеет значения и может использоваться для загрузки дополнительных модулей для данного типа файла.

Замечание: модуль должен иметь расширение ".vim".

Дополнительные детали:


05.5 Добавление файла справки

Если вам повезло, то модуль, который вы установили, поставлялся вместе с файлом справки. Давайте посмотрим, как правильно установить файл справки, чтобы он был доступен в справочной системе.

Возьмём, например, модуль "matchit.vim" (он поставляется вместе с Vim). Этот модуль позволяет использовать команду "%" в том числе для перемещения между соответствующими друг другу тегами HTML, if/else/endif в сценариях Vim и т.д., одним словом чрезвычайно полезная вещь, но, к сожалению, без обратной совместимости, по причине чего он не включён по умолчанию.

У этого модуля есть файл справки: "matchit.txt". Для начала скопируем модуль в необходимый каталог. На этот раз сделаем это непосредственно из Vim, используя переменную окружения $VIMRUNTIME. (Если у вас уже есть необходимый каталог, то можно пропустить некоторые команды "mkdir".)

:!mkdir ~/.vim
:!mkdir ~/.vim/plugin
:!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin

Теперь создадим каталог "doc" в одном из каталогов, указанных в 'runtimepath'.

:!mkdir ~/.vim/doc

Скопируем в него файл справки:

:!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc

А теперь, самое интересное: создадим местный файл меток, который позволит перемещаться к темам в новом файле справки при помощи команды :helptags.

:helptags ~/.vim/doc

Теперь можно пользоваться командой

:help g%

чтобы найти "g%" в файле справки, который мы только что добавили. Когда вы наберёте

:help local-additions

то увидите соответствующую ссылку в файле справки. Заголовки местных файлов справки автоматически добавляются в этот раздел.

О написании собственного файла справки см. Создание справки.


05.6 Окно опций

Справочник по опциям редактора можно посмотреть здесь: |опции|. Альтернативным вариантом может служить использование команды

:options

Эта команда открывает новое окно со списком опций. Каждой опции соответствует краткое пояснение. Опции в этом окне группируются по темам. Для перехода к списку опции, существующих для данной темы, подведите курсор к требуемой теме и нажмите <Enter>. Повторное нажатие <Enter> возвращает вас назад к списку тем. Вы также можете использовать CTRL-O.

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

set wrap        nowrap ~

Когда вы нажмёте <Enter>, то строка изменится на

set nowrap      wrap ~

Это значит, что теперь эта опция отключена.

Краткое описание опции 'wrap' можно прочитать над данной строкой. Переместите курсор на одну строку вверх и нажмите <Enter> для перехода к полному тексту справки по опции 'wrap'.

У тех опций, которые принимают числовое или строковое значение, можно редактировать это значение прямо в окне опций. Для того, чтобы изменения вступили в силу, нажмите <Enter>. Например, переместите курсор на несколько строк вверх к строке

set so=0 ~

Поместите курсор на цифре ноль при помощи команды "$". Измените ноль на пять командой "r5". Теперь нажмите <Enter>, чтобы новое значение опции вступило в силу. Вы заметите, что теперь, когда вы перемещаете курсор, прокрутка окна начинается до того момента, как курсор подходит к границе окна. Именно это и делает опция 'scrolloff', она указывает на отступ от границы экрана, где начинается прокрутка.


05.7 Часто используемые опции

В редакторе существует огромное множество опций. Большую часть из них вы наверняка никогда не будете использовать. Упомянем те, которые, напротив, могут оказаться наиболее полезными. Не забудьте, что по каждой опции можно получить справку при помощи команды ":help", имя опции при этом следует заключать в одинарные кавычки. Например:

:help 'wrap'

Если вы что-то напутали с установками значения опции, то можно восстановить значение по умолчанию при помощи символа амперсанда (&) после имени опции. Например:

:set iskeyword&
ОТКЛЮЧЕНИЕ ПЕРЕНОСА СТРОК

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

:set nowrap

Vim автоматически прокручивает текст в окне, если вы перемещаетесь к тексту, который не показан на экране. Чтобы видеть 10 символов рядом с курсором, воспользуйтесь командой

:set sidescroll=10

Это не изменяет сам текст в файле, только способ его отображения.

ПЕРЕНОС КОМАНД ПЕРЕМЕЩЕНИЯ

Большинство команд перемещения останавливаются в начале и конце строки. Это поведение можно изменить при помощи опции 'whichwrap'. Следующая команда устанавливает эту опцию в значение по умолчанию:

:set whichwrap=b,s

Такая настройка позволяет кнопке <BS>, когда она используется в первой позиции строки, перемещать курсор в конец предыдущей строки. Кнопка <Space> (пробел) перемещает курсор от конца строки к началу следующей.

Для того, чтобы кнопки курсора <Left> и <Right> также могли переносить курсор между строками, используйте команду:

:set whichwrap=b,s,<,>

Однако, это будет работать только в Обычном режиме. Чтобы кнопки <Left> и <Right> вели себя похожим образом и в режиме Вставки, используйте команду:

:set whichwrap=b,s,<,>,[,]

Можно также добавить еще несколько флагов, см. 'whichwrap'.

ПРОСМОТР ТАБУЛЯЦИИ

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

:set list

Теперь каждый символ Tab отображается в виде ^I. Кроме того, в конце строки отображается $, так что вы можете сразу видеть лишние пробелы в конце строк.

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

:set listchars=tab:>-,trail:-

Теперь каждый символ табуляции будет показан в виде ">---" (с разным количеством  символов "-"), а пробелы на конце строк в виде "-". Гораздо приятнее, правда?

КЛЮЧЕВЫЕ СЛОВА

Опция 'iskeyword' определяет, какие символы могут появляться в слове:

    :set iskeyword
<      iskeyword=@,48-57,_,192-255 ~

Символ "@" соответствует всем буквам алфавита, "48-57" соответствует символам ASCII от 48 до 57 (т.е. цифрам от 0 до 9), "192-255" это печатные символы.

Иногда вам может понадобиться включить в список словарных символов символ "минус", чтобы команды вроде "w" считали такие слова, как "что-то" одним словом. Это можно сделать так:

    :set iskeyword+=-
    :set iskeyword
<      iskeyword=@,48-57,_,192-255,- ~

Если вы посмотрите на новое значение, то увидите, что Vim добавил для вас запятую.

Чтобы удалить символ, используйте "-=". Например, чтобы удалить символ подчёркивания:

    :set iskeyword-=_
    :set iskeyword
<      iskeyword=@,48-57,192-255,- ~

На этот раз запятая автоматически удалена.

МЕСТО ДЛЯ СООБЩЕНИЙ

При запуске Vim обычно оставляет на экране только одну строку для сообщений. Если сообщение слишком длинное, то оно либо обрезается, и вы можете видеть только часть сообщения, либо текст прокручивается так, что вам требуется нажимать для продолжения кнопку <Enter>.

Вы можете установить опцию 'cmdheight', которая указывает на количество строк, используемых для вывода сообщений. Пример:

:set cmdheight=3

При этом, конечно, на экране остаётся меньше места для редактирования текста, так что приходится идти на компромисс.


Следующая глава: Использование подсветки синтаксиса
Авторские права: см. Авторские права