Изучаем Unix: Vim новая усовершенствованная версия редактора vi

Правим код независимо от платформы

Если вам доводилось работать с IBM® AIX® или же с другой разновидностью Linux или UNIX, то наверняка вы пользовались редактором vi. С момента его создания в 1976 году vi стал главным инструментом редактирования файлов. Вы спросите — возможно ли создать более мощный инструмент редактирования, чем vi? Мы отвечаем — да. Это Vim, и в этой статье мы рассмотрим многие усовершенствования Vim, которые сделали его одним из самых широко распространённых редакторов в мире UNIX® и Linux®.

Адам Кормэни, администратор национального центра данных, Scientific Games Corporation

Являясь на сегодняшний день администратором национального центра данных, Адам Кормэни (Adam Cormany) в течение последних нескольких лет работал системным инженером UNIX, администратором UNIX и руководителем эксплуатации группы технического сопровождения корпорации Scientific Games. Адам более 10 лет вплотную занимался администрированием операционных систем AIX, Solaris и Red Hat Linux, и имеет статус сертифицированного специалиста IBM по eServer в области администрирования систем pSeries AIX. Помимо администрирования, Адам обладает глубокими знаниями в области написания shell-скриптов для командных оболочек BASH, CSH и KSH, а также умеет программировать на языках C, PHP и Perl.



22.08.2011

Редактор vi — это мощная программа. Уильям Джой, один из соучредителей Sun Microsystems, написал vi в 1976 году для одной из ранних версий Berkeley Software Distribution (BSD) UNIX. Поговаривают, что Билл создал редактор за один уикенд, но сам автор опровергает подобные слухи. Название vi родилось от слова visual— команды в расширенном редакторе командной строки для UNIX, сокращённо называемом "ex".

vi — необычайно мощный редактор, и многие даже не подозревают о некоторых его функциях. vi является многорежимным редактором, т.е. выдает разные результаты в зависимости от режима. Редактор vi может работать в трех режимах —командном, режиме вставки (или ввода) и строковом. При работе в режиме вставки текст записывается во временный файл, который вы и редактируете. В обычном (командном) режиме нажатие тех же самых клавиш приведет к выполнению встроенных команд редактора. Для перехода в режим вставки просто нажмите клавишу «I», для возврата в командный режим нажмите «Esc». (Строковый режим будет подробнее рассмотрен ниже).

Рассмотрим пример. Если ввести последовательность символов 10dd в режиме вставки, то текст будет записан во временный файл, как показано на рисунке 1.

Рисунок 1. Ввод символов dd в режиме вставки
Ввод символов dd в режиме вставки

А в командном режиме ввод той же последовательности символов 10dd удалит из временного файла 10 строк, начиная со строки, на которой находится курсор (рисунок 2).

Рисунок 2. Ввод символов dd в командном режиме
Ввод символов dd в командном режиме

Другим подобным примером является перемещение курсора. В командном режиме нажатие клавиш H, J, K и L приведет к перемещению курсора влево, вниз, вверх и вправо соответственно (рисунок 3). А в режиме вставки на экране просто отобразятся эти буквы.

Рисунок 3. Перемещение курсора в vi
Перемещение курсора в vi

Как правило, пользователи Unix работают либо с vi, либо c редактором Editor Macros (Emacs), созданным Ричардом Столлманом в 1976 году. Тем не менее многие выбирают vi, поскольку он лёгок, быстрее запускается и менее требователен к памяти.

Что же такое Vim?

Vim (или vi Improved) представляет собой расширенную версию редактора vi, созданную Брамом Муленаром в 1991 году. Изначально Vim был разработан для компьютеров Amiga, но быстро распространился по всему пространству UNIX (в 1992 году). Основа Vim, как и vi — текстовый пользовательский интерфейс (TUI) в режиме командной строки и в режиме вставки (рисунок 4).

Рисунок 4. Текстовый интерфейс пользователя
Текстовый интерфейс пользователя

Хотя существует вариант и с графическим пользовательским интерфейсом (GUI) —gVim, показанный на рисунке 5.

Рисунок 5. Графический интерфейс пользователя
Графический интерфейс пользователя

Команды Vim

Внутренние команды 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

Хотя vi и Vim внешне одинаковы, у них есть заметные различия. Далее приведены лишь некоторые.

  • vimscript: С помощью встроенного языка скриптов vimscript в Vim можно создавать сложные сценарии, которые позволяют расширить функциональность редактора. Помимо vimscript, в редакторе поддерживаются Perl, Python, Ruby, Tcl и другие языки.
  • vimdiff: Одной из полезных внутренних команд пакета Vim является vimdiff, которая, по аналогии с sdiff, позволяет выводить на экран несколько файлов друг за другом (рисунок 6).
    Рисунок 6. Пример команды vimdiff
    Пример команды 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?

Теперь, узнав о некоторых из усовершенствований и отличий 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!» Вам повезло!

Просто скачайте с официального сайта Vim последнюю версию редактора для Windows (на сегодняшний день — 7.1). Лучше всего скачать инсталлятор, запустить его и выполнить предложенные программой установки действия. После установки вы сможете щёлкнуть правой кнопкой мышки на иконке файла, в появившемся меню выбрать Edit with Vim (рисунок 11) и приступить к редактированию файла в Vim.

Рисунок 11. Использование Vim в Windows
Использование Vim в Windows

Теперь, установив Vim на свой компьютер с Windows, вы можете наслаждаться его гениальностью, забыв о других текстовых редакторах, существующих в Windows.


Заключение

vi проложил дорогу текстовым редакторам в Unix, а Vim расширил этот путь. Я надеюсь, что благодаря моей статье вы узнали что-то новое о редакторе Vim, научились пользоваться его многочисленными функциями, облегчающими повседневную работу, и отдали должное тому, как такая простая концепция, как текстовый редактор, воплотилась в программу с репутацией стабильного и устойчивого приложения сначала в мире UNIX, а теперь и в большинстве операционных систем. Я верю, что если до прочтения статьи вы не очень часто использовали Vim, то, узнав о нём более подробно, вы согласитесь, что ни один редактор с ним не сравнится.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX, Linux
ArticleID=753423
ArticleTitle=Изучаем Unix: Vim новая усовершенствованная версия редактора vi
publish-date=08222011