16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Курс молодого бойца

04.08.2004

Владимир Царьков

Каждый пользователь GNU/Linux в свое время сталкивается с необходимостью отредактировать какой-нибудь файл конфигурации. Для этих задач гораздо удобнее использовать быстрый текстовый редактор, нежели чем, допустим, тяжелый и неповоротливый OpenWriter. В этой статье я постараюсь рассмотреть основные приемы работы с консольным текстовым редактором VI.

Для начала надо выяснить, как правильно произносить это короткое, но значимое в мире Unix подобных систем название. VI должно произноситься как "vee eye", так гласит официальная документация. Разобравшись с именем нашего текстового редактора, давайте перейдем непосредственно к изучению его возможностей.

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

Начнем. (рис. 1) Запускаем консоль и говорим:

VI myfile.txt

У VI также есть возможность загружать документ с курсором, установленным на определенной вами строке. Например:

VI +5 myfile.txt

Если бы в myfile.txt был текст, то после загрузки файла курсор был бы помещен в начало пятой строки.

Итак, появился черный экран с синими значками по левому краю. (рис. 2) Само по себе редактирование текста и его сохранение проходят в разных режимах. Переключение между режимами осуществляется клавишами Insert, i, a для работы с текстом и Esc для выхода в командный режим, откуда можно сохранять и закрывать документ. Существует много модификаций VI, клавиша Insert как раз используется одной из них, характерной для GNU/Linux дистрибутивов. А вот i и a являются частью оригинального набора. Предполагается, что у нас стоит что-то из GNU/Linux, поэтому, нажав на Insert, мы переходим в режим ввода информации. Курсор в оригинальном VI управляется только с помощью клавиш h, j, k, l.

h - на позицию влево
j - на позицию вниз
k - на позицию вверх
l - на позицию вправо.

Впрочем, в случае GNU/Linux кнопки "вверх", "вниз", "вправо", "влево" будут работать не хуже.

Введя пару строк из серии "Hello world!", поэкспериментируйте с курсором. Вдоволь наигравшись, перейдите в командный режим, нажав на Esc. Самое время сохранить наш myfile.txt. Все команды для VI должны следовать после двоеточия. В появившейся внизу экрана командной строке введите :w, что означает "сохранить". (рис. 3) Готово, файл записан на диск, и мы можем спокойно выйти из VI. Для этого говорим :q. Если, внеся изменения в документ, вы передумали их сохранять, скажите :qa!. Это заставит VI завершить работу без сохранения изменений, внесенных в документ. В том случае, если вам надо отменить все правки, внесенные в документ с последнего сохранения, то скажите :e!. Ну а если просто отменить последнюю команду, то u. Теперь перейдем к командам, позволяющим редактировать текст.

Представьте себе ситуацию: у вас не работает какое-то устройство, проконсультировавшись на одном из форумов у знающих предмет товарищей, вы решаете изменить, допустим, /etc/X11/XF86Config предложенным вам куском текста, но вводить все ручками как-то не хочется, а метод Ctrl-C/Ctrl-V (копировать/вставить) в VI не работает. Что делать? В рассматриваемом нами текстовом редакторе существует свой способ копирования и вставки информации. Заранее отмечу, что нижеописанные действия должны производиться в командном режиме. В VI существуют именованный и неименованный буфер. Ниже представлены команды, которые позволяют копировать текст в неименованный буфер.

yy - копировать строку в неименованный буфер
y - копировать строку в неименованный буфер

Особенностью VI является то, что в большинстве случаев заглавная буква в команде может заменить пару строчных.

nyy - копировать следующие n строк в неименованный буфер
ny - копировать следующие n строк в неименованный буфер
yw - копировать слово в неименованный буфер
ynw - копировать n слов в неименованный буфер
nyw - копировать n слов в неименованный буфер

Посмотрев на строки с командами ynw и nyw, вы можете заметить то, что VI также позволяет не придерживаться строгого порядка букв в некоторых командах.

Минус неименованного буфера в том, что его содержимое может быть повреждено другими командами. Одним словом, если вам нужно сохранить кусок текста на длительный промежуток времени - используйте именованный буфер. VI имеет 26 именованных буферов для хранения информации. Чтобы сохранить строку в именованный буфер, нужно подвести курсор к началу строки и сказать что-то наподобие "ayy, эта команда позволит сохранить строку, в начале которой находится курсор в именованном буфере a. Ниже представлены команды, которые позволяют копировать текст в именованный буфер.

"ayy - копировать строку в именованный буфер a
"aY - копировать строку в именованный буфер a
"byw - копировать слово в именованный буфер b
"byw - добавить слово к содержимому именованного буфера b
"by5w - копировать следующие пять слов в именованный буфер b

Как вы уже, наверное, заметили, VI позволяет копировать в буфер не только строки и слова, но и фиксированные вами количества слов после курсора.

Мы научились копировать информацию в буфер, но как ее оттуда извлекать? Для этого также существует свой набор команд. Сначала давайте рассмотрим процесс вставки содержимого неименованного буфера. В командном режиме нажмите p, это позволит вставить содержимое неименованного буфера справа от курсора, если же вы нажмете P, содержимое буфера окажется слева от курсора. Ниже представлены варианты команд для вставки содержимого как именованного, так и неименованного буферов.

np - вставить n копий содержимого неименованного буфера слева от курсора

np - вставить n копий содержимого именованного буфера справа от курсора

"ap - вставить содержимое именованного буфера a справа от курсора
"cp - вставить содержимое именованного буфера c слева от курсора
"b4p - вставить четыре копии содержимого именованного буфера b слева от курсора.

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

"add - удалить строку и поместить ее в именованный буфер a
"b5dd - удалить пять строк и поместить в именованный буфер b
dw - удалить слово и поместить его в неименованный буфер

Вставка вырезанного текста происходит так же, как и вставка скопированного.

Немаловажно отметить и то, что при работе в командном режиме есть возможность удалять текст не только побуквенно. Ниже указаны некоторые из возможных команд по удалению текста.

x - удалить знак под курсором
dd - удалить строку
d - удалить часть строки, начиная с позиции курсора
ndd - удалить n строк
dg - удалить все с данной позиции курсора до конца файла
dLg - удалить все с данной позиции до начала файла

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

fm - найти следующий знак m (поиск перемещается вправо)
fq - найти следующий знак q (поиск перемещается влево)
/string - поиск слова string вправо и вниз по тексту
?string - поиск слова string влево и вверх по тексту

На иллюстрации (рис. 4) изображена строка для поиска в документе слова "root".

:%s/^..//g - эта команда удаляет по два символа в начале каждой строки документа (рис. 5)

Надеюсь, мне удалось хоть немного приоткрыть завесу тайны, окутавшую отличный консольный текстовый редактор VI.



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты