СПРАВОЧНИК ПО VIM - Брам Мооленаар

1. Аргументы запуска Vim
2. Vim на Amiga
3. Работа с eVim
4. Инициализация
5. $VIM и $VIMRUNTIME
6. Временная остановка работы Vim
7. Сохранение настроек
8. Сеансы и виды
9. Файл viminfo


1. Аргументы запуска Vim

Чаще всего Vim запускается для редактирования одного файла при помощи команды:

vim имя_файла

В более общем случае, Vim запускается следующим образом:

vim [ключ | имя_файла] ..

Ключи и аргументы имён файла могут быть использованы совместно, допускается любое их количество. В то же время, следите за ключами, которые требуют аргумента.

О совместимости с различными версиями Vi см. раздел справки |команда_запуска-аргументы|.

Для выбора способа начала редактирования может быть выбрана один из следующих пяти вариантов (но только один):

имя файла

Один или несколько файлов.  Первый файл в списке будет текущим при запуске и считывается в буфер. Курсор помещается в первой строке буфера. Чтобы избежать ситуации, при которой имя файла, начинающегося с символа '-', воспринимается как ключ командной строки, предварите список аргументов символами "--". Например:

vim -- -filename

Все аргументы после "--" считаются именами файлов. Иными словами, после этих символов не должен встречаться ключ или аргумент виды "+команда".

 -

Этот аргумент, в зависимости от режима запуска (Обычный или Ex) может обозначать две вещи.

Запуск в Обычном режиме:

vim -   
ex -v -

Начало редактирования нового буфера, в который помещается текст, прочитанный со стандартного ввода. Команды, которые обычно читают со стандартного ввода будут читать данные из потока диагностики stderr. Например:

find . -name "*.c" -print | vim -

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

ls | view -

Запуск в режиме Ex:

ex -   
vim -e -
exim -
vim -E

Начать редактирование в "немом" режиме. Подробнее смотрите в -s-ex.

-t {метка}

 Метка. Выполняется поиск указанной метки в файле меток, найденный файл становится текущим файлом и выполняются соответствующие команды. Часто используется при редактировании программ на языке C, где метками часто являются имена функций. В результате текущим  становится файл, содержащий данную функцию, а курсор располагается в начале этой функции (см. метки).

 -q [{файл-ошибок}]

 Режим Быстрого исправления. Считывается файл с именем {файл-ошибок} и редактор переходит к позиции первой ошибки. См. |быстрое_исправление|. Если {файл-ошибок} не указан, то в качестве имени файла используется значение опции 'errorfile'. См. справку по этой опции, чтобы узнать значение по умолчанию. Vi не имеет такой возможности

 (ничего)

 Если не указан один из четырёх рассмотренных аргументов, то Vim перейдёт к редактированию нового буфера. Этот буфер будет пустым и без имени.

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

ex vim -e Запуск в режиме Ex (см. |режим_Ex|).
exim vim -E Запуск в улучшенном режиме Ex (см. |режим_Ex|). (обычно не установлен)
view vim -R Запуск в режиме "только для чтения" (см. |-R|).
gvim vim -g Запуск с графическим интерфейсом (см. |gui|).
gex vim -eg Запуск с графическим интерфейсом в режиме Ex.
gview vim -Rg Запуск с граф. интер. в режиме "только для чтения"
rvim vim -Z Как "vim", но в ограниченном режиме (см. |-Z|)
rview vim -RZ Как "view", но в ограниченном режиме
rgvim vim -gZ Как "gvim", но в ограниченном режиме
rgview vim -RgZ Как "gview", но в ограниченном режиме
evim vim -y Простой Vim: включает 'insertmode' (см. |-y|)
eview vim -yR Как "evim", но в режиме "только для чтения"
vimdiff vim -d Запуск в режиме редактирования различий |режим-diff|
gvimdiff vim -gd Запуск в режиме редактирования различий |режим-diff|

Последующие символы игнорируются, но могут присутствовать. Например, для запуска в графическом интерфейсе можно использовать "gvim-5" (при условии, что такой исполняемый файл существует).

В Unix, как правило, имеется один исполняемый файл, называемый Vim, и связанные с этим исполняемым файлом ссылки с различными именами. Если в вашей системе не поддерживаются ссылки и вы не хотите держать несколько копий одного и того же файла, то можно использовать также синонимы. Например:

alias view   vim -R
alias gvim   vim -g

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

На VMS все ключи считаются набранными строчными буквами, если только перед буквой не указана косая черта. Например, "-R" обозначает восстановление, а "-/R" -- режим "только для чтения".

--help
-h

Вывести справочную информацию о ключах и выйти. {Vi не имеет такой возможности}
О перенаправлении вывода этой информации в файл,  см. |информационное_сообщение|.

--version

Напечатать информацию о версии и выйти. Вывод точно такой же, как и у команды |:version| {Vi не имеет такой возможности}
О перенаправлении вывода этой информации в файл,  см. |информационное_сообщение|.

--noplugin

Не загружать модули.  Отключает опцию 'loadplugins'. {Vi не имеет такой возможности}

Замечание: ключ |-u| также может отключать загрузку модулей:

Ключ Считывать файл vimrc Загружать модули
(nothing) да да
-u NONE нет нет
-u NORC нет да
--noplugin да нет

 --literal

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

Этот ключ не нужен на Unix, поскольку в этих системах Vim всегда воспринимает имена как есть (маски преобразуются оболочкой).

Применяется ко всем именам файлов, в том числе и к тем, которые предшествуют этому ключу.

 +[число]

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

+/{шаблон}

Курсор помещается на первой строке, содержащей "шаблон" в первом из открытых для редактирования файлов (см. |шаблон| для получения справки о доступных шаблонах поиска.

+{команда}
-c {команда}

После прочтения первого файла (и выполнения автокоманд и опций режимной строки) будет выполнена {команда} Ex. Если в тексте команды содержатся пробелы, то команда должна быть помещена в двойные кавычки (хотя это зависит от используемой оболочки).

Пример:

vim  "+set si"  main.c
vim  "+find stdio.h"
vim  -c "set ff=dos"  -c wq  mine.mak

Замечание: вы можете указать при запуске до 10 команд с "+" или "-с". Они выполняются в том порядке, в каком приводятся в строке запуска. Параметр "-S" также работает как "-c". {Vi разрешает использовать только одну команду}.

--cmd {команда}

То же, что и -c {команда}, но {команда} выполняется до считывания файлов vimrc. Вы также можете использовать до 10 таких команд, независимо от команд "-c". {Vi не имеет такой возможности}

-S {файл} 

После чтения первого файла в списке аргументов, будет считан файл сценария {файл}. Это аналогично команде:

-c "source {файл}"

Этот ключ может сочетаться с ключами "-c" и повторяться аналогично ключам "-c". {файл} не может начинаться с "-". Ограничение на 10 команд "-c" распространяется также и на этот параметр. {Vi не имеет такой возможности}

-S

Аналогично ключу "-S Session.vim". Используется только в качестве последнего ключа строки запуска или с другим последующим ключом, начинающимся с "-".

-r

Режим восстановления. Без указания имени файла выводится список существующих своп-файлов. С именем файла будет прочитан указанный своп-файл для восстановления аварийно завершённого сеанса редактирования. См. |восстановление_после_аварии|.

-L

То же, что и -r.
{Vi: есть только в некоторых версиях Vi, "Список восстанавливаемых сеансов редактирования"}

-R

Режим "только для чтения". Для всех редактируемых файлов будет включена опция 'readonly'. Вы сможете редактировать буфер, но Vim предохранит вас от случайной перезаписи файла. Если вы всё-таки захотите сохранить изменения, несмотря на то, что находитесь в режиме "только для чтения", то вам придётся добавить к команде записи восклицательный знак, например ":w!". Опцию 'readonly' можно выключить по команде ":set noro" (см. раздел справочника, посвящённый опциям: |опции|). Последующее редактирование в этом случае не будет проводиться в режиме "только для чтения". Использование ключа -R полностью аналогично вызову Vim по команде view. Опция 'updatecount' в этом режиме устанавливается в значение 10000, т.е. своп-файл не будет обновляться автоматически очень часто.

-m

Запрет на запись изменений. При этом будет отключена опция 'write'. Имейте, однако, в виду, что опцию 'write' всегда можно снова включить. {Vi не имеет такой возможности}

-M

Запрет на внесение изменений. Будут отключены опции 'modifiable' (позволяющая вносить изменения), и 'write' (позволяющая записывать файл на диск). Тем не менее, в любой момент можно снова включить указанные опции. {Vi не имеет такой возможности}

-Z

Ограненный режим. Все команды, которые используют внешнюю оболочку, будут отключены. Это включает временную приостановку Vim по CTRL-Z, ":sh", использование программ-фильтров, функции system(), подстановка команд в обратных кавычках и т.д. {Vi не имеет такой возможности}

-g

Запуск Vim в режиме графического интерфейса. См. |gui|. {Vi не имеет такой возможности}

-v

Запуск Ex в режиме Vi. Ключ оказывает влияние только при запуске исполняемого файла с именем "ex" или "gvim". Для gvim, по возможности, не запускается графический интерфейс.

-e

Запуск Vim в режиме Ex |Q|. Ключ оказывает влияние только в тех случаях, если имя программы не "ex".

-E

Запуск Vim в улучшенном режиме Ex |gQ|. Ключ оказывает влияние только в тех случаях, если имя программы не "exim". {Vi не имеет такой возможности}

-s

"Немой" или пакетный режим. Используется только совместно с ключом -e или при запуске Vim по команде "ex". Во всех остальных случаях смысл этого ключа иной, см. |-s|. При использовании ключа "-s" в остальных случаях требуется указывать параметр, в то время как в данном случае параметр не требуется. Ключ используется при выполнении команд Ex, считываемых Vim вместо терминала из командного файла. Этот ключ отключает выдачу большинства информативных сообщений, а также сообщения об ошибках и предупреждения. Однако, вывод команды ":print" будет отображаться а экране, кроме того при включённой опции 'verbose' выводятся ненулевые сообщения  (с целью отладки).

Если Vim завис, попробуйте ввести команду "qa!<Enter>". Вы не видите приглашение для ввода, поэтому не можете узнать, если Vim ожидает от вас ввода команды.

Любая инициализация, за исключением указанной с помощью ключа "-u", игнорируется.

Пример:

vim -e -s < фильтр файл

-b

Бинарный режим. В качестве символа переноса строк будет распознаваться только <NL>. Опция 'expandtab' будет отключена. Значение опции 'textwidth' будет установлено равным 0. Опция 'modeline' также будет отключена. Всё это выполняется после чтения файлов vimrc/exrc, но до прочтения файлов, указанных в списке аргументов. См. также |редактирование-бинарные_файлы|. {Vi не имеет такой возможности}

-l

Режим Lisp.  Включает опции 'lisp' и 'showmatch'.

-A

Режим арабского. Включает опцию 'arabic'. Ключ работает только в Vim, скомпилированном с включённой особенностью |+arabic| (что также включает особенность |+rightleft|), в противном случае Vim выдаёт сообщение об ошибке и прекращает работу. {Vi не имеет такой возможности}

-F

Режим фарси. Включает опции 'fkmap' и 'rightleft'. Ключ работает только в Vim, скомпилированном с включёнными особенностями |+rightleft| и |+farsi|, в противном случае Vim выдаёт сообщение об ошибке и прекращает работу. {Vi не имеет такой возможности}

-H

Режим иврит. Включает опции 'hkmap' и 'rightleft'. Ключ работает только в Vim, скомпилированном с включённой особенностью |+rightleft|, в противном случае Vim выдаёт сообщение об ошибке и прекращает работу. {Vi не имеет такой возможности}

-V[N]

Устанавливает "уровень болтливости": количество сообщений, которые выдаются Vim. Значение опции 'verbose' устанавливается равным указанному аргументу [N] ключа -V, или 10, если значение не указано.

Сообщения будут выдаваться для каждого файла, считываемого по команде ":source", а также при чтении и записи файла viminfo. Этот ключ может использоваться для выяснения деталей загрузки и выхода редактора. {Vi не имеет такой возможности}

-D

Режим отладки. Редактор переходит в режим отладки при выполнении первой же команды сценария. |режим_отладки|. {доступно только в том случае, если Vim скомпилирован с особенностью |+eval|} {Vi не имеет такой возможности}

-C

Режим полной совместимости. Включает опцию 'compatible'. Этот ключ может помочь перейти в режим полной совместимости даже при наличии файла .vimrc, однако команда ":set nocompatible" всё равно отменяет этот режим. См. также |совместимость_по_умолчанию|. {Vi не имеет такой возможности}

-N

Режим частичной совместимости. Этот ключ может использоваться для выключения опции 'nocompatible' в тех случаях, когда отсутствует файл .vimrc. См. также |совместимость_по_умолчанию|. {Vi не имеет такой возможности}

-y

Простой Vim. Этот ключ подразумевается при запуске редактора с помощью команды |evim| и |eview|. Редактор запускается с включённой опцией 'insertmode' и ведёт себя как обычный безрежимный редактор. При этом считывается сценарий $VIMRUNTIME/evim.vim. Привязки будут работать как в большинстве безрежимных редакторов, см. |кнопки_evim|. Если есть графический интерфейс, то он также будет использоваться.  {Vi не имеет такой возможности}

-n

Своп-файл не используется. Восстановление после аварийного завершения работы будет невозможно. Этот ключ полезен, если вы просматриваете или редактируете файл на очень медленном носителе, например на дискете.  Такого же эффекта можно добиться с помощью команды ":set updatecount=0". Для включения использования своп-файла следует установить значение опции 'updatecount' большим, чем 0, например: ":set uc=100".

Значение 0 опции 'updatecount' устанавливается ПОСЛЕ выполнения команд сценария vimrc, но перед инициализацией графического интерфейса. Таким образом, этот ключ изменяет значение опции 'updatecount', установленное в файле vimrc, но не в файле gvimrc. См. |инициализация|.  Если вы хотите только уменьшить число обращений к диску (например, на ноутбуке), то, вместо ключа "-n", установите значения опций 'updatetime' и 'updatecount' достаточно большими и при сохранении работы введите команду ":preserve". В этом случае у вас остаётся возможность восстановления информации в случае аварийного завершения работы. {Vi не имеет такой возможности}

-o[N]

Открыть N окон, разделённых горизонтально. Если [N] не указано, то окно будет открыто для каждого файла в списке аргументов. Если для открытия необходимого количества окон на экране не хватает места, то будет открыто только несколько окон для первых файлов в списке аргументов. Если количество окон больше, чем количество файлов в списке аргументов, то в последних окнах будут редактироваться пустые файлы. {Vi не имеет такой возможности}

-O[N]

Открыть N окон, разделённых вертикально. Во всём остальном ключ работает так же, как и -o. Если в строке запуска указаны оба ключа, то способ разделения окон определяется последним из использованных ключей. {Vi не имеет такой возможности}

-T {терминал}

Устанавливает тип терминала равным "терминал". Этот ключ влияет на коды, которые отправляются Vim на терминал. Обычно в этом ключе нет необходимости, поскольку Vim сам может определять тип используемого вами терминала (см. |терминал-информация|. {Vi не имеет такой возможности}

-d

Запуск в режиме сравнения отличий, как |vimdiff|. {Vi не имеет такой возможности} {доступно только в том случае, если Vim скомпилирован с особенностью |+diff|}

-d {устройство}

Ключ работает только на Amiga и только в том случае, если Vim скомпилирован без особенности |+diff|. Работает точно так же, как и "-dev".

-dev {устройство}

Работает только на Amiga: для редактирования будет открыто {устройство}.
Обычно этим ключом пользуются для настройки положения и размера окна: "-d con:x/y/width/height", например "-d con:30/10/600/150". Но вы также можете пользоваться этим ключом для того, чтобы начать редактирование на другом устройстве, например AUX:. {Vi не имеет такой возможности}

-f

Amiga: не перезапускать Vim для открытия нового окна. Этот ключ следует использовать в тех случаях, когда Vim запускается из другой программы, которая должна дождаться завершения сеанса редактирования в Vim (например, почтовая программа или программа чтения новостей). См. |amiga-окно_vim|.

GUI (графический интерфейс): Не отсоединяться от программы, из которой был запущен Vim. 'f' означает "foreground", активное приложение. Если этот ключ не указан, то при запуске в графическом интерфейсе текущий процесс будет прерван, а редактор запускается в новом процессе. "-f" следует использовать в тех случаях, когда gvim запускается из программы, которая должна дождаться завершения сессии редактирования (например, mail или readnews). Если вы хотите, чтобы gvim никогда не отсоединялся от запустившего его процесса, то добавьте к значению опции 'guioptions' флаг 'f'.

Будьте внимательны: для запуска графического интерфейса в качестве активной задачи оболочки можно использовать "-gf", но ключ "-fg" применяется для настройки цвета текста. |gui-fork| {Vi не имеет такой возможности}

-u {vimrc}

Команды для инициализации читаются из файла {vimrc}. Остальные команды инициализации при этом игнорируются; см. |инициализация|. Это можно использовать для запуска Vim в каком-нибудь специальном режиме, со специальными настройками и привязками. Для упрощения запуска можно даже настроить синоним в оболочке. Например:

alias vimc vim -u ~/.c_vimrc !*

Также следует рассмотреть возможность использования для этой цели автокоманд; см. |автокоманда|.

Если в качестве {vimrc} указано "NONE" (прописными буквами), то игнорируются все виды инициализации из файлов сценариев и переменных окружения, в том числе файл .gvimrc при запуске графического интерфейса. Кроме того, не будут подгружаться и модули.

Если в качестве {vimrc} указано "NORC" (прописными буквами), то это оказывает такое же влияние, как и использование "NONE", но модули, тем не менее, будут загружаться. Побочным эффектом использования ключа "-u" является включение опции 'compatible', что может привести к неожиданным последствиям. См. |'compatible'|. {Vi не имеет такой возможности}

-U {gvimrc}

Команды для инициализации при запуске графического интерфейса читаются из файла "gvimrc". Все остальные виды инициализации графического интерфейса игнорируются. Если в качестве {gvimrc} указано "NONE", то при инициализации графического интерфейса никакие файлы со сценариями инициализации считываться не будут.

Исключение: системный файл меню читается в любом случае. {Vi не имеет такой возможности}

-i {viminfo}

Вместо файла viminfo, используемого по умолчанию, будет использоваться файл {viminfo}. Если вместо имени файла указано "NONE" (прописными буквами), то файл viminfo вообще не используется, даже если включена опция 'viminfo' или применяются команды ":rv" или ":wv". См .также |файл_viminfo|. {Vi не имеет такой возможности}

-x

Использовать шифрование при записи и чтении файла. При этом Vim выдаст приглашение ввести пароль, который сохраняется в значении опции 'key'. Этот пароль используется для шифрования текста при записи. Ключ '-x' не нужен при чтении зашифрованного файла, поскольку при чтении файла всегда проверяется, если файл зашифрован, и в том случае, если это так, то Vim выдаст приглашение ввести пароль автоматически. |шифрование|

-X

Не устанавливать соединение с сервером X для установки заголовка окна и использования буфера обмена X. Это позволяет избежать задержки при запуске Vim в эмуляторе терминала в тех случаях, когда соединение с сервером X происходит по медленному каналу. Этот ключ оказывает влияние только при использовании на Unix или VMS в тех случаях, когда Vim скомпилирован с особенностью |+X11|. В противном случае он игнорируется.

Для того, чтобы отключить подсоединение к серверу X только для определённых терминалов, см. справку по опции 'clipboard'. При использовании встроенного протокола управления сеансом X11 (XSMP, X11 Session Management Protocol), ключ -X также запрещает это соединение, поскольку оно также может вызывать нежелательные задержки при запуске.

В cлучае, если соединение потребуется позднее (например, для получения клиент-серверных сообщений), используется функция |serverlist()|. Однако, при этом не происходит включение обработчика XSMP. {Vi не имеет такой возможности}

-s {сценарий}

Будет считываться файл "сценарий". Символы в этом файле интерпретируются так, как будто вы набирали бы их с клавиатуры. Того же самого можно добиться с помощью команды ":source! {сценарий}". Если конец файла сценария достигается раньше выхода из редактора, то дальнейший ввод читается с клавиатуры. Ключ работает только в том случае, если редактор запускается не в режиме Ex, см. |-s-ex|. См. также |сложные_повторения|. {Vi не имеет такой возможности}

-w {сценарий}

Все символы, которые вы вводите, записываются в файл {сценарий}, до тех пор, пока вы не выйдете из редактора. Это полезно при создании файлов сценариев, которые затем будут использоваться с командой ":source!" или при запуске редактора с ключом "-s". Если файл {сценарий} уже существует, то новые символы будут добавляться в конец файла. См. также |сложные_повторения|. {Vi не имеет такой возможности}

-W {сценарий}

То же, что и -w, но новые символы не добавляются в конец файла. Существующий файл будет перезаписан. {Vi не имеет такой возможности}

-w{число}

Этот ключ ничего не делает. Он включён только для совместимости с Vi. В Vi этот ключ включает опцию 'window', которая не используется в Vim.

--remote
[+{команда}] {файл} ...

Открыть {файл} в другом Vim, который будет выполнять роль сервера. Все аргументы, которые не являются именем файла, должны следовать до этого ключа. См. |--remote|. {Vi не имеет такой возможности}

--remote-silent
[+{команда}] {файл} ...

Как --remote, но Vim не будет жаловаться, если сервера нет. См. |--remote-silent|. {Vi не имеет такой возможности}

--remote-wait
[+{команда}] {файл} ...

Как --remote, но Vim будет дожидаться окончания редактирования файлов на сервере. См. |--remote-wait|. {Vi не имеет такой возможности}

--remote-wait-silent
[+{команда}] {файл} ...

Как --remote-wait, но Vim не будет жаловаться, если сервера нет. См. |--remote-wait-silent|. {Vi не имеет такой возможности}

--servername {имя}

Указать имя сервера Vim для отправки файла или стать сервером Vim с указанным именем. См. |--servername|. {Vi не имеет такой возможности}

--remote-send
{последовательность-нажатий}

Отправить {последовательность-нажатий} на сервер Vim и выйти. См. |--remote-send|. {Vi не имеет такой возможности}

--remote-expr {выражение}

Вычислить {выражение} в другом Vim, выполняющем роль сервера. Результат выводится в стандартном потоке вывода. См. |--remote-expr|. {Vi не имеет такой возможности}

--serverlist

Показать список серверов Vim и выйти. См. |--serverlist|. {Vi не имеет такой возможности}

--socketid {id}

Только для версии Vim GTK+ GUI. Этот ключ позволяет Vim пытаться использовать механизм GtkPlug, для запуска редактора внутри другого окна. Подробности см. |gui-gtk-socketid|. {Vi не имеет такой возможности}

--echo-wid

Только для версии Vim GTK+ GUI. Позволяет получить на стандартном выводе команды gvim значение Window ID, которое может быть использовано для запуска gvim в kpart. Формат вывода следующий:

WID: 12345\n

{Vi не имеет такой возможности}

--role {роль}

Только для графического интерфейса GTK+ 2. Установить роль основного окна в значение {роль}. Роль окна может использоваться менеджером окон для однозначной идентификации окна, чтобы восстанавливать различные параметры окна при запуске, например, положение окна на экране. Параметр --role автоматически передаётся при восстановлении сеанса при входе в систему. См. |gui-gnome-session|. {Vi не имеет такой возможности}

-P {заголовок_родителя}

Только для Win32: Указать заголовок родительского приложения. Если это окажется возможным, Vim попытается начать работу в многооконном интерфейсе внутри указанного приложения. {заголовок_родителя} должен соответствовать заголовку окна родительского приложения. Убедитесь, что заголовок указан достаточно точно.

Обращаем ваше внимание, что реализация этой возможности всё ещё пока довольно сырая. Она работает не со всеми приложениями и при этом невозможна работа меню.

-nb

-nb={имя_файла}

-nb:{имя_машины}:
{адрес}:{пароль}

Попытаться связаться с Netbeans и стать сервером редактирования для него. Вторая форма ключа запуска позволяет задавать имя файла, в котором содержится информация о соединении, а третья форма ключа позволяет задать имя машины, адрес и пароль для соединения с Netbeans. См. |netbeans-запуск|.

Пример использования файла сценария для изменения имени в нескольких файлах:

    Создайте файл "subs.vi", содержащий команды подстановки и команду для выхода :wq:

:%s/Jones/Василий/g
:%s/Allen/Пупкин/g
:wq

    Теперь можно выполнить этот сценарий со всеми файлами, в которых необходимо произвести изменения:

foreach i ( *.let ) vim -s subs.vi $i

Если исполняемый файл редактора называется "view", то Vim будет запущен в режиме "только для чтения". Это полезно в тех случаях, когда вы можете сделать жёсткую или символическую ссылку от "view" к "vim". Запуск в режиме "только для чтения" также возможен с помощью команды "vim -R".

Если исполняемый файл редактора называется "ex", то Vim будет запущен в режиме "Ex". Это означает, что редактор будет воспринимать только ":"-команды. Однако, если указан ключ -v, то редактор всё равно будет запущен в Обычном режиме.

На системах Unix в скомпилированном с поддержкой графического интерфейса X11 редакторе также доступно несколько дополнительных ключей. См. |gui-ресурсы|.


2. Vim на Amiga

Запуск Vim из Workbench

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

Для редактирования одного или нескольких файлов в Vim можно использовать значок "Project". Значение "Default Tool" для значка должно быть установлено равным полному пути к исполняемому файлу Vim. Имя файла ".info" должно совпадать с именем текстового файла. При двойном щелчке по данному значку Vim будет запущен с указанным файлом в качестве текущего. Если файл существует, то он будет прочитан в текущий буфер. Для редактирования нескольких файлов можно выбрать нужные значки файлов с клавишей Shift и на последнем значке дважды щёлкнуть мышью. Для всех значков должен быть указан одинаковый "Default Tool".

При запуске из Workbench в качестве аргументов Vim можно передавать только имена файлов.

окно Vim

Vim будет открыт в том окне CLI, из которого он был запущен. Если Vim был запущен по команде "run" или "runback", а также в том случае, когда Vim был запущен из Workbench, Vim будет открыт в своём собственном новом окне.

Технические детали:
Для открытия нового окна используется небольшой трюк. Как только Vim понимает, что запущен не в обычном окне CLI, он создаёт файл со сценарием собственного запуска в "t:". Этот сценарий содержит те же самые команды, с которыми был запущен Vim, а также команду "endcli". Этот сценарий затем выполняется с командой "newcli" (чтобы это работало, требуется наличие команд "c:run" и "c:newcli"). Созданный файл сценария сохраняется до момента перезагрузки или до тех пор, пока вы его не удалите вручную. Использование такого метода требуется для корректного выполнения команд ":sh" и ":!". Однако, в тех случаях, когда Vim запускается с ключом -f, то этот метод не применяется. Дело в том, что когда программа запускает Vim с ключом -f, то она дожидается завершения сеанса редактирования. При использовании трюка с отдельным сценарием программа не сможет узнать, когда редактор завершил свою работу. Ключ -f может быть использован при запуске Vim из почтовой программы, которая ожидает завершения сеанса редактирования. Как следствие, при запуске редактора с ключом -f команды ":sh" и ":!" будут недоступны.

Vim автоматически распознаёт размеры окна и реагирует на их изменение. В Amiga DOS 1.3 рекомендуется использовать программу fastfonts, "FF", для более быстрого обновления экрана.


3. Работа с eVim

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

В EVim изменяются значения следующих опций:

:set nocompatible Используются улучшения Vim
:set insertmode Редактор в основном находится в режиме Вставки
:set hidden Спрятанные буферы остаются загруженными
:set backup Сохраняются резервные копии (кроме VMS)
:set backspace=2 Backspace работает всегда
:set autoindent Автоматическое форматирование отступов новых строк
:set history=50 Сохранять 50 строк команд Ex
:set ruler Показывать положение курсора в линейке
:set incsearch Показывать соответствия при частичном вводе шаблона
:set mouse=a Использовать мышь во всех режимах
:set hlsearch Подсвечивать все соответствия шаблону поиска
:set whichwrap+=<,>,[,] <Left> и <Right> переходят через перенос строки
:set guioptions-=a В графическом интерфейсе, кроме Unix: не выполнять автоматическое выделение

Привязки кнопок:

<Down> Перемещение по строкам экрана, а не строкам файла
<Up> То же
Q Выполняет "gq", т.е. форматирование, вместо перехода в режим Ex
<BS> В Визуальном режиме: удаляет выделение
CTRL-X В Визуальном режиме: вырезает в буфер обмена
<S-Del> То же
CTRL-C В Визуальном режиме: копирует в буфер обмена
<C-Insert> То же
CTRL-V Вклеивает из буфера обмена (в любом режиме)
<S-Insert> То же
CTRL-Q Выполняет то, что обычно делает CTRL-V
CTRL-Z Отмена операции
CTRL-Y Повторное выполнение операции
<M-Space> Системное меню
CTRL-A Выделить всё
<C-Tab> Следующее окно, CTRL-W w
<C-F4> закрыть окно, CTRL-W c

Кроме того,

  • используется ":behave mswin" |:behave|
  • включается подсветка синтаксиса
  • включается определение типа файла, а также модули типа файла и форматирования отступов.
  • в текстовом файле значение опции 'textwidth' устанавливается равным 78

Совет: если вы хотите перейти в Обычный режим для того, чтобы ввести серию команд, используйте CTRL-L. |i_CTRL-L|


4. Инициализация

Этот раздел посвящён инициализации консольных версий Vim. Информацию о дополнительной инициализации при запуске графического интерфейса читайте в |gui-fork|.

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

  1. Устанавливается значение опций 'shell' и 'term'. Для опции 'shell' используется переменная окружения SHELL, если она установлена. В противном случае, на MS-DOS и Win32 также может быть использована переменная COMSPEC. Для установки значения опции 'term' используется переменная окружения TERM, если она существует.
  2. Разбираются ключи и аргументы командной строки.  Выясняется, с какими ключами в командной строке был запущен Vim и какие указаны файловые аргументы. Создаются буферы для всех файлов (но пока не загружаются).
  3. Выполняются команды Ex, из переменной окружения и/или файлов инициализации. Переменная окружения и файлы считываются как командная строка Ex, где различные команды должны быть разделены символом '|' или "<NL>". 
    Файл, содержащий команды инициализации, называется "vimrc". Каждая строка в этом файле исполняется как команда Ex. Иногда этот файл также называется "exrc". Это один и тот же по содержанию файл, просто Vi традиционно использует файл "exrc", а Vim использует "vimrc". См. также |vimrc-введение|.
    Рекомендуется хранить сценарии инициализации в следующих местах:
    Unix $HOME/.vimrc
    OS/2 $HOME/.vimrc или $VIM/.vimrc (или _vimrc)
    MS-DOS and Win32 $HOME/_vimrc или $VIM/_vimrc
    Amiga s:.vimrc или $VIM/.vimrc

    Если Vim был запущен с ключом "-u имя_файла", то используется файл "имя_файла". Все последующие виды инициализации, вплоть до пункта 4., в этом случае не выполняются. Для пропуска настроек запуска без чтения файла можно использовать команду "vim -u NORC". Команда "vim -u NONE" также позволяет пропустить загрузку модулей. См. |-u|.

    Если Vim был запущен в режиме Ex с ключом "-s", то все последующие виды инициализации вплоть до пункта 4. не выполняются, рассматривается только значение ключа "-u".

    • Если Vim запущен как |evim| или |eview| или с ключом |-y|, то загружается сценарий $VIMRUNTIME/evim.vim.
    • На Unix, MS-DOS, MS-Windows, OS/2, VMS, Macintosh, RISC-OS и Amiga считываются команды инициализации из системного файла vimrc. Путь к этому файлу указан в выводе команды ":version". Как правило, это "$VIM/vimrc".
      Обратите внимание, что этот файл ВСЕГДА считывается в режиме полной совместимости 'compatible', поскольку автоматическое выключение опции 'compatible' происходит позднее. Вы можете добавить команду ":set nocp", если это необходимо.
    • Ведётся поиск дополнительных сценариев инициализации в одном из четырёх указанных ниже мест. Используется первый из найденных сценариев, остальные игнорируются.
      • Значение переменной окружения VIMINIT (см. также |совместимость_по_умолчанию|) (*).
        Значение переменной $VIMINIT используется в виде командной  строки Ex.
      • Пользовательский файл vimrc:
        "$HOME/.vimrc" (для Unix и OS/2) (*)
        "s:.vimrc" (для Amiga) (*)
        "home:.vimrc" (для Amiga) (*)
        "$VIM/.vimrc" (для OS/2 и Amiga) (*)
        "$HOME/_vimrc" (для MS-DOS и Win32) (*)
        "$VIM\_vimrc" (для MS-DOS и Win32) (*)

        Замечание: В Unix, OS/2 и Amiga, если ".vimrc" не существует, то ведётся также поиск файла "_vimrc", на тот случай, если используется MS-DOS-совместимая файловая система. В MS-DOS и Win32 файл существование ".vimrc" проверяется только в случае отсутствия "_vimrc", на тот случай, если используются длинные имена файлов.

        Замечание: В MS-DOS и Win32 прежде всего проверяется значение переменной "$HOME". Если файл "_vimrc" или ".vimrc" не найден в каталоге, указанном в этой опции, то выясняется содержание каталога, указанного в переменной "$VIM". Подробнее о значении переменной $VIM читайте здесь: |$VIM|.

      • Значение переменной окружения EXINIT.
        Значение $EXEINIT используется в виде командной строки Ex.
      • Пользовательский файл exrc. Поиск происходит в тех же местах, что и поиск пользовательского файла "vimrc" выше, но при этом не применяется пункт (*).
    • Если включена опция 'exrc' (по умолчанию -- отключена), то в текущем каталоге происходит выполнение первого найденного файла из четырёх указанных ниже (остальные файлы игнорируются):
      • -  Файл ".vimrc" (для Unix, Amiga и OS/2) (*)
                "_vimrc" (для MS-DOS и Win32) (*)
      • -  Файл "_vimrc" (для Unix, Amiga и OS/2) (*)
                ".vimrc" (для MS-DOS и Win32) (*)
      • -  Файл ".exrc"  (для Unix, Amiga и OS/2)
                "_exrc"  (для MS-DOS и Win32)
      • -  Файл "_exrc"  (для Unix, Amiga и OS/2)
                ".exrc"  (для MS-DOS и Win32)
        (*) Использование этого файла или переменной окружения отключает опцию 'compatible'. См. |совместимость_по_умолчанию|.
  4. Загрузка модулей.

    Выполняется загрузка модулей, иными словами происходит то же самое, как если бы вы выполнили команду Vim:

    :runtime! plugin/*.vim

    Прежде всего происходит поиск подкаталога "plugin" во всех каталогах, указанных в списке значений опции 'runtimepath', затем из каждого найденного подкаталога считываются в алфавитном порядке все файлы с расширением ".vim".

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

    • В vimrc отключена опция 'loadplugins'.
    • В строке запуска указан ключ |--noplugin|.
    • В строке запуска указан ключ "-u NONE" |-u|.
    • Vim скомпилирован с выключенной опцией |+eval|.

    Обратите внимание, что использование "-c set noloadplugins" не будет иметь никакого эффекта, поскольку команды, указанные в строке запуска, ещё не выполнялись.

  5. Устанавливаются значения опций 'shellpipe' и 'shellredir'.

    Значения опций 'shellpipe' и 'shellredir' устанавливаются в соответствии со значением опции 'shell', если они не были установлены раннее. Другими словами, если вы не установили значения этих опций раннее, то Vim попытается сам определить подходящие значения за вас.

  6. Если использован ключ "-n", то опция 'updatecount' устанавливается равной 0.
  7. Устанавливаются опции для редактирования бинарных файлов.

    Если в команде запуска указан ключ "-b", то устанавливаются опции для редактирования бинарных файлов. См. |-b|.

  8. Выполняется инициализация для графического интерфейса.

    Инициализация для графического интерфейса выполняется при запуске "gvim". См. |gui-инициализация|.

  9. Читается файл viminfo

    Если опция 'viminfo' не пустая, то обрабатывается файл viminfo. См. |файл_viminfo|.

  10. Читается файл с быстрыми исправлениями.

    Если указан ключ "-q", то считывается файл быстрых исправлений. В случае неудачного прочтения, Vim завершает работу.

  11. Открываются все окна.

    При использовании ключа |-o| открываются все необходимые окна (но пока не показываются на экране). Если выполняется переключение экрана, то оно происходит в этот момент. Затем начинается обновление экрана. Если указан ключ "-q", то редактор переходит к первой ошибке в файле быстрых исправлений. Загружаются буферы для всех окон.

  12. Выполняются команды запуска

    Если указан ключ "-t", то выполняется переход к указанной метке. Выполняются команды, указанные в ключах |-c| и |+cmd|. Если включена опция 'insertmode', то происходит переход в режим Вставки. Выполняются автокоманды |VimEnter|.

Советы по использованию инициализации:
Стандартная настройка:

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

~/.vimrc (Unix и OS/2)
s:.vimrc (Amiga)
$VIM\_vimrc (MS-DOS and Win32)

Замечание: создание такого файла vimrc приведёт к отключению опции 'compatible' по умолчанию. См. |совместимость_по_умолчанию|.

Локальные настройки:

Поместите все команды, которые необходимы для редактирования файлов в определённом каталоге, в файле ".vimrc" ("_vimrc" в MS-DOS и Win32) в данном каталоге. ЗАМЕЧАНИЕ: Чтобы Vim выполнял поиск этих специальных файлов вам потребуется включить опцию 'exrc'. См. также |о_троянах|.

Системные настройки:

Этот совет касается только администраторов многопользовательских систем Unix, которые желают установить настройки по умолчанию для всех пользователей. Создайте файл vimrc с командами для настроек и привязок по умолчанию и поместите его в каталог, указанный в выводе команды ":version".

Сохранение текущего состояния Vim в файл:

Если вы изменили значения опции или создали привязки, то, возможно, захотите сохранить из в файле vimrc для последующего использования. О сохранении текущего состояния редактора в файле читайте здесь: |сохранение_настроек|.

Как не создавать проблем пользователям Vi:

Vi использует для инициализации значение переменной окружения EXINIT и файл "~/.exrc". Если вы не хотите, чтобы ваши настройки путались с настройками для Vi, то используйте переменную окружения VIMINIT и файл "vimrc".

Переменные окружения на Amiga:

На Amiga существует два типа переменных окружения. Vim распознаёт переменные, которые устанавливаются командой setenv операционной системы DOS 1.3 (или более поздней версии). См. руководство по AmigaDos 1.3. Переменные окружения, которые устанавливаются старой командой Manx Set (до версии 5.0), не распознаются.

Разделители строк MS-DOS:

На MS-DOS-подобных системах (сама MS-DOS, Win32 и OS/2) Vim считает, что разделителями строки в файле являются пары символов <CR><NL>. Это может привести к проблемам, если в вашем файле используется в качестве разделителя строки символ <NL>, а в самом файле содержатся строки вида ":map xx yy^M". Символ ^M на конце строки будет проигнорирован.

При запуске Vim опция 'compatible' включена. Это используется в самом начале процесса инициализации. Однако, как только Vim начинает выполнение пользовательского файла vimrc, или файла vimrc в текущем каталоге, а также при установленной переменной окружения "VIMINIT", опция 'compatible' будет отключена. Это имеет свои последствия, поскольку повлечёт за собой включение и отключение других опций (см. 'compatible'). Однако, при этом будут изменены только те опции, которые не были изменены до этого. Обратите внимание, что это не касается чтения системного файла vimrc.

Имеется ещё одно последствие выключения опции 'compatible' в момент обнаружения файла .vimrc: привязки интерпретируются в тот момент, в который они встречаются в файле. При использовании "<CR>", например, значение опции 'compatible' может влиять на эффект таких привязок. Если та или иная привязка зависит от значения опции 'compatible' в момент задания привязки, то установите необходимое значение этой опции непосредственно перед определением привязки.

Указанное поведение может быть переопределено следующими способами:

  • Если указан ключ "-N", то будет использоваться значение 'nocompatible', даже в тех случаях, когда файл vimrc не существует.
  • Если указан ключ "-C", то будет использоваться значение 'compatible', даже в тех случаях, когда файл vimrc существует.
  • Если указан ключ "-u {vimrc}", то будет использоваться значение 'compatible'.
  • Если имя исполняемого файла заканчивается на "ex", то принцип такой же, как и при использовании ключа "-C": используется значение 'compatible', даже если существует файл vimrc. Это сделано для того, чтобы Vim вёл себя как "ex", если он запущен в режиме "ex".
Как избежать вирусов-"троянов":

При чтении файлов "vimrc" или "exrc" в текущем каталоге выполнение некоторых команд по соображениям безопасности отключается при помощи опции 'secure'. Это всегда выполняется при выполнении команды из файла меток. В противном случае была бы возможна ситуация, когда вы случайно могли бы выполнить нежелательные команды из чужого файла меток или vimrc. При этом отключаются команды, которые запускают оболочку, записывают в файл и ":autocmd". Выполнение команд ":map" отражается на экране, так что вы можете видеть, что происходит.

Если вы хотите, чтобы Vim выполнял любые команды в локальном файле vimrc, то вам потребуется выключить опцию 'secure' с помощью переменных окружения EXINIT или VIMINIT или в системном файле "exrc" или "vimrc". По очевидным причинам это невозможно сделать в локальном файле "vimrc" или "exrc".

В системе Unix это происходит только в тех случаях, когда вы не являетесь владельцем файла. Предупреждение: если вы распаковываете архив, содержащий файл vimrc или exrc, то вы становитесь владельцем этого файла. В этом случае у вас не будет необходимой защиты. Перед запуском Vim в этом каталоге проверяйте файл vimrc, или отключайте опцию 'exrc'. На некоторых системах Unix пользователь может выполнять команду "chown". Это означает, что кто-то может создать файл vimrc и сделать вас его владельцем. Будьте осторожны!

При использовании команд поиска по меткам, выполнение команды поиска (последняя часть в строке файла меток) всегда выполняется в безопасном режиме. Это работает точно так же, как выполнение команды vimrc/exrc в текущем каталоге.

Если Vim запускается слишком медленно, то может быть несколько причин для этого:
  • При использовании версии Unix с включёнными при компиляции графическим интерфейсом и/или X11 (проверьте вывод команды ":version" на предмет "+GUI" и "+X11"), может требоваться время для загрузки динамических библиотек и подсоединения к серверу X11. Попробуйте скомпилировать версию без графического интерфейса и X11. При запуске на терминале можно также избежать подсоединения к серверу X11 с помощью ключа команды запуска |-X|.
  • Если вы используете "viminfo", то для загрузки файла viminfo также может потребоваться некоторое время. Вы можете проверить, если проблема заключена именно в этом, временно отключив использование viminfo (используйте ключ команды запуска "-i NONE", |-i|). Постарайтесь уменьшить число строк, которые сохраняются в регистрах, с помощью команды  ":set viminfo='20,<50,s10". См. |файл_viminfo|.

При запуске Vim без указания файлов для редактирования, на экране будет отображена заставка (для тех, кто не знает, что такое Vim). Она исчезает при первом же обновлении экрана. Для того, чтобы посмотреть заставку снова, используйте команду ":intro" (если на экране недостаточно места, то вы увидите заставку лишь частично).

Чтобы не показывать заставку при запуске, добавьте флаг 'I' к значению опции 'shortmess'.

Ключи |--help| и |--version| заставляют Vim выдать информационное сообщение и прекратить работу. Обычно сообщение выводится в стандартном потоке вывода, но его можно перенаправить в файл, например, с помощью команды:

vim --help >file

Или, из Vim:

:read !vim --help

При использовании gvim редактор понимает, что он может быть запущен с рабочего стола без терминала, на котором можно отобразить сообщение. Это определяется при выяснении того факта, что как стандартный поток вывода, так и стандартный поток диагностики, не являются устройствами tty. В этом случае указанная выше команда работать не будет; вам придётся изменить значение опции 'shellredir' с ">&" на ">":

:set shellredir=>
:read !gvim --help

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

5. $VIM и $VIMRUNTIME

Переменная окружения "$VIM" используется при поиске различных пользовательских файлов, таких как сценарий запуска ".vimrc". Её значение зависит от операционной системы, см. |запуск|.

Чтобы избежать необходимости установки переменной "$VIM" каждым пользователем вручную, Vim пытается установить значение этой переменной в следующем порядке:

  1. Значение, определённое переменной окружения $VIM. Это можно использовать, чтобы заставить Vim вести поиск необходимых файлов в нужном каталоге. Например:
    setenv VIM /home/paul/vim
  2. Используется значение пути, указанное в опции 'helpfile', если только это значение не содержит другую переменную окружения (по умолчанию, "$VIMRUNTIME/doc/help.txt": проблема яйца и курицы). Имя файла ("help.txt" или другое) обрезается, далее обрезаются каталоги в следующем порядке: "doc", "runtime" и "vim{версия}" (например, "vim54").
  3. В MSDOS, Win32 и OS/2 Vim пытается использовать имя каталога, в котором находится исполняемый файл. Если путь оканчивается на "/src", то этот каталог обрезается. Это полезно при распаковке архива .zip в каком-либо каталоге и последующем исправлении значения переменной PATH. Каталоги в правой части пути обрезаются в следующем порядке: "runtime" и "vim{версия}" (например, "vim54").

 

4. На Unix используется каталог для установки, определённый при компиляции (см. вывод команды ":version").

Проделав это, Vim устанавливает переменную окружения $VIM. Для изменения её значения впоследствии, используйте команду ":let":

:let $VIM = "/home/paul/vim/"

Переменная окружения "$VIMRUNTIME" используется для поиска различных файлов, которые необходимы при работе Vim, например, файлов справочника или правил подсветки синтаксиса. Основной файл справки, как правило, находится в "$VIMRUNTIME/doc/help.txt".

Обычно вам не требуется устанавливать значение переменной $VIMRUNTIME вручную, Vim сам пытается это сделать в следующем порядке:

  1. Если установлена переменная окружения $VIMRUNTIME, то используется её значение. Этим можно пользоваться в том случае, когда необходимые файлы находятся в необычном месте.
  2. Если существует каталог "$VIM/vim{версия}", то используется путь к нему. {версия} это номер версии Vim без символов '-' или '.'. Например, "$VIM/vim54". Это обычное значение для $VIMRUNTIME.
  3. Если существует "$VIM/runtime", то используется этот каталог.
  4. Используется значение $VIM. Это применяется для обратной совместимости со старыми версиями.
  5. Если установлено какое-либо значение опции 'helpfile', которое не содержит символа '$', то используется это значение без "doc/help.txt" на конце.

В Unix, если существует значение $VIMRUNTIME по умолчанию, установленное во время компиляции (проверьте вывод команды ":version"), то шаги 2, 3 и 4 пропускаются, а значение по умолчанию используется после шага 5. Это означает, что установленное при компиляции значение по умолчанию переопределяет значение переменной $VIM. Это полезно, если "$VIM" указывает, например, на "/etc", а файлы, необходимые при работе Vim, находятся в каталоге "/usr/share/vim/vim54".

Проделав это, Vim устанавливает переменную окружения $VIMRUNTIME. Для изменения её значения впоследствии, используйте команду ":let":

:let $VIMRUNTIME = "/home/piet/vim/vim54"

6. Временная остановка работы Vim

CTRL-Z Приостановка работы Vim, как по команде ":stop". Работает в Обычном и Визуальном режимах. В режимах Вставки и Командной строки будет вставлен обычный символ CTRL-Z. В Визуальном режиме Vim перед остановкой переходит в Обычный режим.
:sus[pend][!] или :st[op][!] Приостановка работы Vim. Если к команде не добавлен символ '!', а опция 'autowrite' включена, то каждый буфер с именем, в котором есть несохранённые изменения, будет сохранён на диск. Если добавлен символ '!' или отключена опция 'autowrite', то буферы с изменениями не сохраняются на диске. Не забудьте восстановить Vim в режим активной задачи!

При работе в графическом интерфейсе эти команды приводят к сворачиванию окна Vim.

На большинстве систем Unix возможно приостановить работу Vim с помощью команды CTRL-Z. Это возможно в Обычном и Визуальном режиме (см. главу |режимы_vim|). Vim продолжит работу, когда снова станет активной задачей. На других системах по команде CTRL-Z будет запущена новая оболочка, как при выполнении команды ":sh". Vim продолжит работу при выходе из этой оболочки.

В X-windows выделение теряет владельца при временной остановке работы Vim. Это означает, что вы не сможете вклеить выделенный текст в другом приложении (поскольку Vim переходит в состояние sleep, то попытка получить содержимое выделения привела бы к зависанию программы).

7. Сохранение настроек

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

:mk[exrc] [файл] Записать текущие привязки и изменения в значениях опций в [файл] (по умолчанию ".exrc" в текущем каталоге), если указанный файл ещё не существует. {Vi не имеет такой возможности}
:mk[exrc]! [файл] Всегда записывать текущие привязки кнопок и изменения в значениях опций в [файл], даже если указанный файл уже существует (по умолчанию ".exrc" в текущем каталоге). {Vi не имеет такой возможности}
:mkv[imrc][!] [файл] Как ":mkexrc", но значением по умолчанию является ".vimrc" в текущем каталоге. В этот файл также записывается команда ":version".  {Vi не имеет такой возможности}

Эти команды сохраняют команды ":map" и ":set" в файл таким образом, что при выполнении записанных команд текущие значения привязок и опций будут установлены в те же значения, что и в момент записи файла. Опции 'columns', 'endofline', 'fileformat', 'key', 'lines', 'modified', 'scroll', 'term', 'textmode', 'ttyfast' и 'ttymouse' не сохраняются, поскольку их значения зависят от файла и типа используемого терминала. Замечание: опции 'binary', 'paste' и 'readonly' тем не менее сохраняются, что может быть нежелательно.

При использовании в привязках специальных символов, опция 'cpoptions' будет временно установлена в значение по умолчанию, чтобы избежать неправильной интерпретации привязок. Это приводит к тому, что указанный файл будет несовместим с Vi, но зато его можно будет использовать на различных терминалах.

Сохраняются только глобальные привязки, но не локальные по отношению к буферу.

Лучше всего использовать стандартный файл ".vimrc", сделать необходимые изменения в настройках опций и привязок с помощью команд ":map" и ":set", а затем записать произведённые изменения. Для этого сначала следует считать файл .vimrc, при помощи команды вроде ":source ~piet/.vimrc.Cprogs", изменить настройки, и сохранить в текущем каталоги при помощи команды ":mkvimrc!". Если вы захотите сделать созданный таким образом .vimrc вашим сценарием по умолчанию, то поместите его в свой домашний каталог (на Unix), s: (Amiga) или каталог $VIM (MS-DOS). Вы также можете пользоваться автокомандами |автокоманда| и/или режимными строками |режимная_строка|.

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

  1. Откройте файл vimrc для редактирования в Vim.
  2. Настройте опцию, как это вам необходимо. Например, попробуйте различные значения 'guifont'.
  3. Добавьте строку для установки значения этой опции, воспользовавшись при вводе значения регистром выражений '='. Например, для добавления текущих настроек опции 'guifont':
    o:set guifont=<C-R>=&guifont<CR><Esc>

    [<C-R> это CTRL-R, <CR> это Enter, <Esc> это кнопка escape]

Замечание: созданный файл .vimrc может повлиять на значение опции 'compatible', что может вызвать некоторые побочные последствия; подробнее см. |'compatible'|. По этой причине команды ":mkvimrc", ":mkexrc" и ":mksession" прежде всего записывают в файл команду для включения/выключения опции 'compatible'.

8. Сеансы и виды

Подробно о сеансах и видах читайте в разделах |21.4| и |21.5| руководства пользователя.

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

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

Виды и сеансы являются хорошим дополнением к файлам viminfo, которые используются для хранения информации обо всех видах и сеансах |файл_viminfo|.

Начать редактирование с сохранённым видом или сеансом можно с помощью ключа команды запуска |-S|:

vim -S Session.vim

Относительно всего вышесказанного действительно следующее:

:mks[ession][!] [файл] Записать сценарий Vim, который восстанавливает текущий сеанс редактирования. Существующий файл будет переписан, если указан [!]. Если [файл] не указан, то используется "Session.vim".

{Vi не имеет такой возможности} и {доступно только в том случае, если Vim скомпилирован с особенностью |+mksession|}.

Результат работы команды ":mksession" похож на результат работы ":mkvimrc", но в файл также добавляются дополнительные команды. Характер этих дополнений зависит от значения опции 'sessionoptions'. Полученный в результате выполнения этой команды файл можно выполнить при помощи команды ":source", в результате чего происходит следующее:

  1. Если значение опции 'sessionoptions' содержит "options", то восстанавливаются глобальные привязки и опции. Привязки, определённые как локальные по отношению к сценариям, не восстанавливаются.
  2. Если значение опции 'sessionoptions' содержит "globals", то восстанавливаются все глобальные переменные, имена которых начинаются с прописной буквы и содержат хотя бы одну строчную букву.
  3. Выгружаются все загруженные в данный момент буферы.
  4. Если значение опции 'sessionoptions' содержит "curdir", то восстанавливается значение текущего каталога, либо, если значение опции 'sessionoptions' содержит "sesdir", то значение текущего каталога устанавливается так, что указывает на каталог, в котором находится файл сеанса.
  5. Если значение опции 'sessionoptions' содержит "winpos", то восстанавливается положение окна Vim при использовании графического интерфейса.
  6. Если значение опции 'sessionoptions' содержит "resize", то восстанавливаются размеры окна.
  7. Загружается список буферов с позициями курсора в каждом из них. Если значение опции 'sessionoptions' содержит "buffers", то восстанавливаются все буферы, включая скрытые и выгруженные буферы. В противном случае восстанавливаются только те буферы, для которых есть открытые окна.
  8. Восстанавливается раскладка всех окон. Если значение опции 'sessionoptions' содержит "help", то восстанавливаются окна справочника. Если значение опции 'sessionoptions' содержит "blank", то восстанавливаются окна для безымянных буферов. Если значение опции 'sessionoptions' содержит "winsize", то после восстановления окон для безымянных буферов и справки восстанавливаются размеры окон (относительно размеров экрана). В противном случае окна нарезаются исходя из разумных размеров.
  9. Восстанавливаются виды для всех окон, как по команде |:mkview|. Однако, в этом случае вместо 'viewoptions' используется значение опции 'sessionoptions'.
  10. Если существует файл с тем же именем, что и файл сеанса, но с окончанием "x.vim" (от слова eXtra, "дополнительно"), то этот файл также будет выполнен. Вы можете пользоваться файлами *x.vim для указания дополнительных настроек и действий, относящихся к данному сеансу, например для создания определённых меню при работе с графическим интерфейсом.

После восстановления сеанса, полное имя файла сеанса сохраняется во внутренней переменной "v:this_session" |this_session-переменная|. Пример привязки для сохранения текущего сеанса и начала выполнения команды для загрузки другого сеанса:

:nmap <F2> :wa<Bar>exe "mksession! " . v:this_session<CR>:so ~/sessions/
:mkvie[w][!] [файл] Записать сценарий Vim, который восстанавливает содержание текущего окна.
Существующий файл будет переписан, если указан [!]. Если [файл] не указан, или указано число от 1 до 9, то имя файла для сохранения вида создаётся автоматически, в каталоге, указанном в значении опции 'viewdir'. Если последний каталог в пути 'viewdir' не существует, то он будет создан автоматически. В этом случае существующий файл будет переписан. Для загрузки данного вида используйте команду |:loadview|. Если [файл] является именем файла, то 'viewdir' не используется, а в созданный файл добавляется команда для редактирования соответствующего файла.

Файл, созданный с помощью команды ":mkview", содержит следующие элементы:

  1. Список аргументов, используемый в данном окне. Если используется общий список аргументов, то будет восстановлен общий список аргументов.
  2. Имя редактируемого файла. Если окно не связано с файлом на диске, то будет восстановлено пустое окно.
  3. Если в значении опции 'viewoptions' содержится "options" или "localoptions", то будут восстановлены привязки, сокращения и опции, определённые локально для данного окна.
    При сохранении вида как части сеанса будут также сохраняться глобальные значения для локальных опций, если в значении опции 'sessionoptions' содержится "options".
  4. Если в значении опции 'viewoptions' содержится "folds", то будут восстановлены складки, определённые вручную. Также восстанавливается состояние складок, открытых или закрытых вручную.
  5. Восстанавливается состояние прокрутки окна и позиция курсора в файле. С этим возможны проблемы при наличии закрытых складок.
  6. Восстанавливается значение локального по отношению к окну текущего каталога, если оно отличается от глобального текущего каталога.

Замечание: Виды и сеансы имеют ряд несовершенств:
- Восстановлению подлежит не всё. Например, не восстанавливаются определённые функции, автокоманды, ":syntax on". Содержимое регистров, история командной строки и т.п. сохраняются в viminfo, а не в сеансах и видах.
- Значения глобальных опций восстанавливаются только в том случае, если они отличаются от значений по умолчанию. Если текущее значение не является значением по умолчанию, то при восстановлении сеанса оно не будет изменено. Локальные опции, однако, восстанавливаются к значению по умолчанию.
- Существующие привязки переписываются без предупреждения. Существующие привязки могут приводить к ошибкам неоднозначности.
- При восстановлении складок и состояния складок, определённых вручную, возможны проблемы, связанные с изменениями в файле, происшедшими между моментом сохранения и моментом восстановления вида.
- Сценарии Vim не могут похвастаться высокой производительностью. Однако, они всё равно намного быстрее, чем набор команд вручную!

:lo[adview] [номер] Загрузить вид для текущего файла. Если [номер] не указан, то загружается вид, сохранённый по команде ":mkview". Если [номер] указан, то загружается вид, сохранённый по команде ":mkview [номер]".

Пользуясь командами ":mkview" и ":loadview" можно сохранять до десяти различных видов для каждого файла. Эти виды сохраняются в каталоге, указанном в значении опции 'viewdir'. Виды сохраняются с использованием имени файла. Если имя файла будет изменено или доступ к нему происходит по (символической) ссылке, то вид для файла не сможет быть найден.

Время от времени полезно чистить каталог 'viewdir', удаляя неактуальные виды.

Для автоматического сохранения и восстановления видов можно пользоваться автокомандами. Например, для файлов *.c:

    au BufWinLeave *.c mkview
    au BufWinEnter *.c silent loadview

9. Файл viminfo

Файл viminfo используется для сохранения различной информации о состоянии Vim между отдельными сеансами редактирования. Подробное введение в использование файла viminfo можно прочитать в руководстве пользователя, раздел |21.3|.

В файле viminfo сохраняется следующая информация:

  • История командной строки.
  • История команд поиска.
  • История строки ввода.
  • Содержимое регистров.
  • Локальные отметки для нескольких файлов.
  • Глобальные отметки.
  • Последний использованный шаблон для поиска/подстановки  (для команд 'n' и '&').
  • Список буферов.
  • Глобальные переменные.

Файл viminfo поддерживается только в том случае, если особенность |+viminfo| была включена во время компиляции редактора.

Вы также можете пользоваться файлами сеансов. Различие между сеансами и viminfo состоит в том, что viminfo не зависит от редактируемого файла. Обычно существует только один файл viminfo. Для сохранения особенностей конкретных сеансов редактирования используются файлы сеансов. Файлы сеансов могут быть созданы для различных проектов, над которыми вы работаете. Совместное использование файлов сеансов и viminfo позволяет запускать Vim с максимальной эффективностью и начинать работу в уже настроенном окружении. |файл_сеанса|

Содержание файла viminfo читается при запуске редактора в том случае, если значение опции 'viminfo' не является пустым. При запуске считываются глобальные отметки (но не локальные отметки). О деталях настройки опции 'viminfo' при запуске см. в разделе |инициализация|.

Если значение опции 'viminfo' не является пустым, то при выходе из редактора соответствующая информация сохраняется (точнее, дополняется, если файл уже существует) в файле viminfo. Значением опции 'viminfo' является строка, сообщающая, какого рода информация должна сохраняться в viminfo, а также устанавливающая ограничения на объём этой информации (см. 'viminfo').

Замечания для Unix:

  • При использовании файла viminfo устанавливается защита этого файла от посторонних, поскольку в нём может содержаться текст и команды, с которыми вы работаете.
  • Если вы хотите разрешить доступ к вашему файлу viminfo другим пользователям (например, чтобы иметь возможность обращения к этому файлу при использовании команды "su"), то вы можете установить права для доступа к нему самостоятельно. Эти права будут сохранены при добавлении в файл viminfo новой информации. Будьте внимательны, не открывайте доступ к файлу viminfo всем подряд.
  • Vim не будет добавлять информацию в файл viminfo, если права доступа к файлу не позволяют запись для эффективного в данный момент пользователя. Это полезно, например, в тех ситуациях, когда вы получаете права суперпользователя по команде su, а $HOME по прежнему указывает на домашний каталог обычного пользователя. В противном случае, Vim создал бы файл viminfo, принадлежащий суперпользователю, который больше никто не смог бы прочитать.

Локальные отметки сохраняются для каждого файла отдельно. При загрузке файла в редактор также читаются отметки для этого файла из viminfo (если, конечно, значение опции 'viminfo' не является пустым). ЗАМЕЧАНИЕ: Отметки записываются только в момент завершения работы Vim, что не должно вызывать проблем, поскольку редактор помнит отметки для всех файлов, которые были открыты в течение текущего сеанса, если только не была введена команда ":bdel". Если вам необходимо сохранить отметки для файла, чей буфер вы собираетесь удалить, то воспользуйтесь командой ":wv". Отметки '[' и ']' не сохраняются, но зато сохраняется отметка '"'. Отметка '"' очень полезна для восстановлении позиции курсора в момент предыдущего завершения работы с данным файлом. Отметки не сохраняются для файлов, начальные символы имён которых в опции 'viminfo' предваряются флагом "r". Например, для того, чтобы не сохранять отметки для файлов на сменных носителях можно пользоваться значениями опции 'viminfo' "ra:,rb:" (на MS-DOS) или "rdf0:,rdf1:,rdf2:" (на Amiga).

Отметки с именами, являющимися прописными буквами (от 'A' до 'Z') сохраняются при записи файла viminfo. У отметок, чьи имена представляют собой цифры (от '0' до '9'), особое значение. В момент сохранения файла viminfo при выходе или по команде ":wviminfo"), в отметке '0 сохраняется текущая позиция курсора и имя файла. Прежнее значение отметки '0 перемещается в отметку '1, значение отметки '1 -- в отметку '2, и т.д. Это напоминает поведение регистров для удаления от "1 до "9. Если текущая позиция курсора уже существует в отметках от '0 до '9, то её значение перемещается в отметку '0, чтобы избежать повторения. В итоге, по команде "'0" можно всегда переместиться к файлу и строке, в которой вы находились при завершении работы редактора. Чтобы выполнить эту операцию непосредственно при запуске Vim, можно воспользоваться командой:

vim -c "normal '0"

В оболочке можно назначить этой команде синоним:

alias lvim vim -c '"'normal "'"0'"'

Используйте флаг 'r' в значении опции 'viminfo' для указания файлов, отметки в которых не должны запоминаться.

ИМЯ ФАЙЛА VIMINFO
  • По умолчанию файл viminfo называется "$HOME/.viminfo" на Unix и OS/2, "s:.viminfo" на Amiga, "$HOME\_viminfo" на MS-DOS и Win32. На MS-DOS и Win32 используется "$VIM\_viminfo", если переменная окружения $HOME не установлена. Если не установлена и переменная $VIM, то используется файл "c:\_viminfo". На OS/2 используется "$VIM/.viminfo", если переменная окружения $HOME не установлена, но установлена переменная $VIM.
  • Для указания на другое имя файла viminfo используется флаг 'n' в опции 'viminfo'. См. |'viminfo'|.
  • Для указания другого имени файла viminfo можно также пользоваться ключом "-i" в команде запуска Vim, см. |-i|. Если вместо имени файла в качестве  аргумента имени файла указано "NONE" (прописными буквами), то файл viminfo не читается и не записывается, в том числе и по командам ":rw" и ":wv"!
  • При использовании команд ":rw" и ":wv" можно указывать другое имя файла, переопределяя используемое по умолчанию значение и значение, указанное в опции 'viminfo' или в аргументе ключа "-i" (кроме NONE).
КОДИРОВКА СИМВОЛОВ

Текст в файле viminfo сохраняется в кодировке, указанной в опции 'encoding'. Обычно вам не требуется изменять значение этой опции, но при чтении файла, записанного в другой кодировке, могут возникнуть проблемы с символами, не относящимися к набору ASCII. В этих случаях может помочь добавление флага 'c' к значению опции 'viminfo':

:set viminfo+=c

Vim попытается в этом случае преобразовать текст, сохранённый в файле viminfo из кодировки, указанной в значении опции 'encoding' в момент записи, в кодировку, определённую текущим значением опции 'encoding'. Для этого Vim должен быть скомпилирован со включённой опцией |+iconv|. Имена файлов не подлежат преобразованию.

ЧТЕНИЕ И ЗАПИСЬ ФАЙЛА VIMINFO ВРУЧНУЮ

Для чтения и записи файла viminfo вручную существует две специальные команды. Особенно полезными они могут быть для быстрого обмена содержимым регистров между двумя разными копиями Vim: достаточно ввести команду ":wv" в одном Vim, и затем ввести команду ":rv" в другом. Замечание: если в регистрах уже что-то хранится, то потребуется ввести команду ":rv!". Обратите также внимание, что вместе с содержимым регистров будут также заменены и другие элементы файла viminfo из первой копии Vim: история командной строки и т.д.

Сам файл viminfo также можно редактировать вручную. Лучше всего начать с редактирования уже существующего файла viminfo, чтобы не напутать с форматом. Содержание файла достаточно очевидно. Редактирование файла viminfo вручную может быть полезно для создания дополнительного файла, например "~/.my_viminfo", с определёнными настройками, которые вы всегда хотели бы иметь при запуске Vim. Например, в таком файле можно поместить описания определённых регистров или добавить в историю командной строки определённые команды. Для автоматического считывания этого файла следует добавить в .vimrcтакую команду:

:rviminfo! ~/.my_viminfo

Можно также создать набор различных файлов viminfo для различных типов файлов (например, для исходных текстов программ на C) и затем загружать их с помощью команды ":autocmd" (см. |:autocmd|) в зависимости от типа текущего имени файла.

Если при чтении файла viminfo Vim обнаружит в нём ошибки, то он не станет перезаписывать этот файл. В случае, если будет обнаружено более 10 ошибок, Vim прекратит считывание этого файла viminfo. Это сделано так для того, чтобы предохранить файл от случайного уничтожения в том случае, если имя файла viminfo указано неправильно. Такое может произойти, например, если случайно запустить Vim по команде "vim -i file" вместо "vim -R file" (такие случаи известны!). Если вы хотите перезаписать файл viminfo, в котором обнаружены ошибки, то вам придётся или исправить эти ошибки, или удалить файл (чтобы восстановить большую часть информации, лучше удалить файл viminfo с ошибками пока Vim всё ещё запущен).

:rv[iminfo][!] [файл] Чтение информации из файла viminfo [файл] (по умолчанию: см. выше). Если добавлен [!], то вся уже имеющаяся информация (регистры, отметки и т.д.) будет переопределена. {Vi не имеет такой возможности}
:wv[iminfo][!] [файл] Запись информации в файл viminfo [файл] (по умолчанию: см. выше). При записи сначала происходит чтение файла для объединения уже имеющейся информации с новой. Если используется [!], то уже имеющаяся информация не читается, в файл сразу записывается текущая информация. Если значение опции 'viminfo' пустое, то сохраняется информация об отметках для 100 файлов. Если вы столкнулись с ошибкой "E138: Невозможно записать файл viminfo", проверьте, не осталось ли у вас неудалённых старых временных файлов (например, ~/.viminf*), а также права на запись в каталоге, в котором сохраняется файл .viminfo. {Vi не имеет такой возможности}