Редактор vi — это мощная программа. Уильям Джой, один из соучредителей Sun Microsystems, написал vi в 1976 году для одной из ранних версий Berkeley Software Distribution (BSD) UNIX. Поговаривают, что Билл создал редактор за один уикенд, но сам автор опровергает подобные слухи. Название vi родилось от слова visual — команды в расширенном редакторе командной строки для UNIX, сокращённо называемом "ex".
vi — необычайно мощный редактор, и многие даже не подозревают о некоторых его функциях. vi является многорежимным редактором, т.е. выдает разные результаты в зависимости от режима. Редактор vi может работать в трех режимах — командном, режиме вставки (или ввода) и строковом. При работе в режиме вставки текст записывается во временный файл, который вы и редактируете. В обычном (командном) режиме нажатие тех же самых клавиш приведет к выполнению встроенных команд редактора. Для перехода в режим вставки просто нажмите клавишу «I», для возврата в командный режим нажмите «Esc». (Строковый режим будет подробнее рассмотрен ниже).
Рассмотрим пример. Если ввести последовательность символов 10dd в режиме вставки, то текст будет записан во временный файл, как показано на рисунке 1.
Рисунок 1. Ввод символов dd в режиме вставки
А в командном режиме ввод той же последовательности символов 10dd удалит из временного файла 10 строк, начиная со строки, на которой находится курсор (рисунок 2).
Рисунок 2. Ввод символов dd в командном режиме
Другим подобным примером является перемещение курсора. В командном режиме нажатие клавиш H, J, K и L приведет к перемещению курсора влево, вниз, вверх и вправо соответственно (рисунок 3). А в режиме вставки на экране просто отобразятся эти буквы.
Рисунок 3. Перемещение курсора в vi
Как правило, пользователи Unix работают либо с vi, либо c редактором Editor Macros (Emacs), созданным Ричардом Столлманом в 1976 году. Тем не менее многие выбирают vi, поскольку он лёгок, быстрее запускается и менее требователен к памяти.
Vim (или vi Improved) представляет собой расширенную версию редактора vi, созданную Брамом Муленаром в 1991 году. Изначально Vim был разработан для компьютеров Amiga, но быстро распространился по всему пространству UNIX (в 1992 году). Основа Vim, как и vi — текстовый пользовательский интерфейс (TUI) в режиме командной строки и в режиме вставки (рисунок 4).
Рисунок 4. Текстовый интерфейс пользователя
Хотя существует вариант и с графическим пользовательским интерфейсом (GUI) — gVim, показанный на рисунке 5.
Рисунок 5. Графический интерфейс пользователя
Внутренние команды Vim схожи с командами vi. В таблице 1 представлены команды для управления курсором в Vim.
Таблица 1. Команды для управления курсором в Vim
| Команда | Действие |
|---|---|
| h | Перемещает курсор влево |
| j, знак плюса (+), Enter или Return | Перемещает курсор вниз |
| k, знак минуса (-) | Перемещает курсор вверх |
| l | Перемещает курсор вправо |
| } | Перемещает курсор в конец текущего параграфа |
| { | Перемещает курсор в начало текущего параграфа |
| ) | Перемещает курсор в конец текущего предложения |
| ( | Перемещает курсор в начало текущего предложения |
| ^ | Перемещает курсор к первому символу в текущей строке (за исключением символов пробела) |
| $ | Перемещает курсор в конец текущей строки |
| 0 (zero) | Перемещает курсор в начало текущей строки |
| w или W | Перемещает курсор в начало следующего слова |
| b или B | Перемещает курсор в начало предыдущего слова |
| e | Перемещает курсор в конец следующего слова |
| H | Перемещает курсор к первой строке на экране |
| M | Перемещает курсор к средней строке на экране |
| L | Перемещает курсор к последней строке на экране |
| G | Перемещает курсор в конец файла |
| gg | Перемещает курсор в начало файла |
| :n | Перемещает курсор к строке n |
В таблице 2 представлены команды Vim для удаления текста.
Таблица 2. Команды Vim для удаления текста
| Команда | Действие |
|---|---|
| d | Удалить выделенный участок |
| dd | Удалить целиком текущую строку |
| 10dd | Удалить 10 строк, начиная с текущей строки |
| dw | Удалить слова, идущие после курсора |
| db | Удалить слова, стоящие перед курсором |
| dl | Удалить символ под курсором |
| dh | Удалить символ слева от курсора |
| d0 (zero) | Удалить текст от курсора до начала текущей строки |
| D | d$ | Удалить целиком часть строки после курсора |
| x | Удалить символ под курсором |
| X | Удалить символ перед курсором |
В таблице 3 представлено еще несколько полезных команд.
Таблица 3. Наиболее часто применяемые команды Vim
| Команда | Действие |
|---|---|
| ih | Перейти в режим вставки и оставить курсор в текущей позиции |
| I | Перейти в режим вставки и переместить курсор в начало текущей строки |
| a | Перейти в режим вставки и переместить курсор на один символ вперед |
| A | Перейти в режим вставки и переместить курсор в конец текущей строки |
| c | Изменить выделенный участок |
| C | Изменить целиком часть строки после курсора |
| o | Создать пустую строку под строкой, на которой находится курсор и переместить его в начало новой строки |
| O | Создать пустую строку над строкой, на которой находится курсор, и переместить его в начало новой строки |
| r | Заменить один символ под курсором |
| R | Заменить символы, начиная с символа под курсором. |
| <Esc> | Вернуться в режим вставки или в графический режим |
| > или <Tab> | Сделать отступ вправо для выделенного фрагмента |
| < | Сделать отступ влево для выделенного фрагмента |
| v | Перейти к выделению символов |
| V | Перейти к выделению строк |
| yy | Вставить/скопировать текущую строку в память |
| 10yy | Вставить/скопировать 10 строк в память, начиная с текущей строки |
| p | Вставить скопированные или удаленные символы после курсора. Если копировались или удалялись строки, вставить их под текущей строкой. |
| P | Аналог команды p, но вставляет символы перед курсором, а строки — над текущей строкой.
|
| u | Отменить последнее изменение |
| <Ctrl> R | отмена последней команды u |
| /<шаблон> | Произвести поиск по шаблону вперед и перенести курсор в начало найденного слова |
| ?<шаблон> | Произвести поиск по шаблону назад и перенести курсор в начало найденного слова |
| n | Повторить последний поиск |
| N | Повторить последний поиск, изменив его направление |
| !<команда> | Выполнить <команду> операционной системы. |
Несмотря на то, что командный режим и режим вставки используются наиболее часто, работа в строковом режиме не менее эффективна, но пользователи не до конца понимают и используют его возможности. Строковый режим переводит нас в строчный редактор, позволяя применять команды к одной или нескольким строкам. Учитывая, что свое название vi получил от одной из команд линейного редактора ex, можно сказать, что строковый режим переносит вас в редактор ex.
Для перехода из командного режима в строковый просто нажмите двоеточие (:).
Курсор переместится в левый нижний угол окна, при вводе с клавиатуры весь текст будет следовать за двоеточием в нижней части окна. При нажатии клавиши Enter команда обрабатывается и исполняется. Если вы передумали и не хотите, чтобы введённая в строковом режиме команда выполнялась, нажмите Esc для возврата в командный режим.
Работая в строковом режиме редактора, необходимо помнить о двух способах ввода команд. Первый способ: при вводе команды, связанной с редактированием текста, vi или Vim применяет изменения только к текущей строке (на которой находится курсор). Второй способ позволяет указывать номер строк, к которым будут применяться команды. Для этого после двоеточия указывается номер строки или интервал строк (номера начальной и конечной строки интервала отделяются запятой ,).
Например, для обработки только 23-й строки начало команды будет иметь вид
:23. Для изменения строк с 2319-й по 3819-ю команда начинается с :2319,3819. Для обработки строк с 45-й и до последней в файле, последний аргумент заменяется знаком доллара ($) —
:45,$.
Далее перечислены лишь некоторые команды, доступные в строковом режиме.
:w <имя файла>: Записать файл на диск. С дополнительным аргументом данные будут записаны в файл с именем <имя файла>.Примечание: с дополнительным аргументом, и если файл <имя файла> уже существует, данные в нем не будут перезаписаны.
:w! <имя файла>: Переписать данные в файле и сохранить его на диске.:<x>,<y> w <имя файла>: Записать строки с <x> по <y> в файл <имя файла>.:q: Выйти из редактора без сохранения.Примечание: Если данные были изменены, программа предложит сохранить файл или выйти без сохранения.
:q!: Выйти из редактора, не сохраняя файл на диске.:n: При редактировании нескольких файлов перейти к следующему файлу в списке редактирования.:e <имя файла>: Редактировать <имя файла>.:e#: Переключение между двумя редактируемыми файлами.:s/<str1>/<str2>/: Заменить первую встретившуюся в текущей строке последовательность символов <str1> на <str2>.:1,$ s/<str1>/<str2>/g: Заменить последовательность символов <str1> на <str2> начиная с 1-й строки и до последней в файле.:r <имя файла>: Загрузить файл <имя файла> в текущий сеанс редактирования.:<x>,<y> d: Удалить строки с <x> по <y>.:<x>,<y> y: Вставить строки с <x> по <y>.
Хотя vi и Vim внешне одинаковы, у них есть заметные различия. Далее приведены лишь некоторые.
- vimscript: С помощью встроенного языка скриптов vimscript в Vim можно создавать сложные сценарии, которые позволяют расширить функциональность редактора. Помимо vimscript, в редакторе поддерживаются Perl, Python, Ruby, Tcl и другие языки.
- vimdiff: Одной из полезных внутренних команд пакета Vim является
vimdiff, которая, по аналогии сsdiff, позволяет выводить на экран несколько файлов друг за другом (рисунок 6).
Рисунок 6. Пример команды vimdiff
- Редактирование сжатых файлов: Для экономии места в системе администраторы часто сжимают файлы журналов и другие большие файлы. И как только файл сжат, кто-нибудь обязательно попросит посмотреть файл журнала двухмесячной давности. Вместо того чтобы разворачивать файл и затем работать с ним в vi, можно сразу начать работать со сжатым файлом в Vim. Vim поддерживает редактирование файлов, сжатых архиваторами bzip2, gzip и zip.
- Редактирование файлов архивов: С помощью Vim также можно редактировать файлы в архивах
tar. При работе с файлом .tar редактор Vim в удобном виде показывает в окне список, позволяющий выбрать нужный для редактирования файл в архиве, как показано на рисунке 7. Закончив работу с файлом, просто сохраните изменения и закройте его обычным способом (:wq). Вы вернетесь к окну со списком файлов в архиве и сможете выбрать другой файл для работы или закрыть окно со списком (:q).
Рисунок 7. Выбор файла из архива
В примере, показанном на рисунке 8, четыре текстовых файла в кодировке ASCII были заархивированы с помощью
tar, а затем в Vim был выбран для редактирования второй файл в архиве.
Рисунок 8. Редактирование файла из архива
- Разделение окна: Вместо того чтобы переключаться от окна к окну при работе с несколькими файлами, в gVim можно открыть несколько файлов в одном окне, а также на ходу создавать новые файлы в том же окне (рисунок 9).
Рисунок 9. Разделение окна
- Подсветка синтаксиса: Отладка shell-скриптов или другого программного кода, написанного другими, может быть непростой задачей. Благодаря Vim, вам будет легче разобраться с чужими исходниками. С помощью Vim можно выделять разными цветами разные участки программного кода, что позволяет упростить процесс отладки shell-скриптов, так же как и программ, написанных на других языках (рисунок 10).
Рисунок 10. Подсветка синтаксиса
- Сохранение положения курсора: При редактировании файла часто бывает необходимо закрыть его и переключиться на решение других задач. Но при возврате к редактированию файла не всегда удается вспомнить, в каком месте вы остановились. Не беспокойтесь — Vim запоминает положение курсора при закрытии файла, что очень помогает при работе с файлами в несколько тысяч строк!
- Многократные отмены/повторы действий: Раньше, редактируя файл в vi, можно было отменять только последнее действие. Для начала это было прекрасно, но явно недостаточно. Иногда, при написании скриптов или другого программного кода, внесенные изменения оказываются не самыми лучшими, и возникает необходимость «откатиться» назад до последних десяти исправлений. Vim позволяет проделать такой откат.
- Визуальный режим: Vim позволяет выделять определённые блоки текста в «визуальном» режиме. В этом режиме можно выделять любой объём текста в редактируемом файле, и затем применить команду для изменения выделенного фрагмента. Например, если надо удалить середину параграфа, нужно нажать клавишу
vдля перехода в визуальный режим, курсором выделить нужную часть текста и нажатьdдля его удаления.
Теперь, узнав о некоторых из усовершенствований и отличий Vim от vi, вы, возможно, воскликнете: «Мне нужен Vim! Где его взять?» Можем вас обрадовать: Vim портирован на разные ОС.
Вот лишь краткий перечень поддерживаемых платформ:
- Amiga
- AIX
- BSD
- Cygwin
- IBM OS/2®
- Linux
- Apple Mac OS и Mac OS X
- Microsoft® MS-DOS®
- Microsoft Windows® от 95 до Windows Vista®
- Microsoft Windows CE
- OpenVMS
Итак, увидев в предыдущем списке, что существует версия Vim для Windows, вы воскликнули: «Я хочу работать в Vim под Windows!» Вам повезло!
Просто скачайте с официального сайта Vim последнюю версию редактора для Windows (на сегодняшний день — 7.1). Лучше всего скачать инсталлятор, запустить его и выполнить предложенные программой установки действия. После установки вы сможете щёлкнуть правой кнопкой мышки на иконке файла, в появившемся меню выбрать Edit with Vim (рисунок 11) и приступить к редактированию файла в Vim.
Рисунок 11. Использование Vim в Windows
Теперь, установив Vim на свой компьютер с Windows, вы можете наслаждаться его гениальностью, забыв о других текстовых редакторах, существующих в Windows.
vi проложил дорогу текстовым редакторам в Unix, а Vim расширил этот путь. Я надеюсь, что благодаря моей статье вы узнали что-то новое о редакторе Vim, научились пользоваться его многочисленными функциями, облегчающими повседневную работу, и отдали должное тому, как такая простая концепция, как текстовый редактор, воплотилась в программу с репутацией стабильного и устойчивого приложения сначала в мире UNIX, а теперь и в большинстве операционных систем. Я верю, что если до прочтения статьи вы не очень часто использовали Vim, то, узнав о нём более подробно, вы согласитесь, что ни один редактор с ним не сравнится.
-
Оригинал статьи: "
The new and improved Vim editor
" (EN)
-
Статья об AIX в Wikipedia: прекрасная статья об операционной системе AIX с дополнительной информацией об её истоках и разработке.(EN)
-
Статья о vi в Wikipedia: дополнительная информация о редакторе vi.(EN)
-
VIM в Wikipedia: прекрасная статья о редакторе VIM.(EN)
-
Редактор Vim: подробности про Vim.(EN)
-
AIX Wiki:
среда сотрудничества для размещения технической информации об AIX.(EN)
Являясь на сегодняшний день администратором национального центра данных, Адам Кормэни (Adam Cormany) в течение последних нескольких лет работал системным инженером UNIX, администратором UNIX и руководителем эксплуатации группы технического сопровождения корпорации Scientific Games. Адам более 10 лет вплотную занимался администрированием операционных систем AIX, Solaris и Red Hat Linux, и имеет статус сертифицированного специалиста IBM по eServer в области администрирования систем pSeries AIX. Помимо администрирования, Адам обладает глубокими знаниями в области написания shell-скриптов для командных оболочек BASH, CSH и KSH, а также умеет программировать на языках C, PHP и Perl.