Изучаем текстовый редактор vi


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

$ vi myfile.txt

Если вы установили vim, напечатайте “vim myfile.txt”. Если вы используете gvim, напечатайте “gvim myfile.txt”. myfile.txt - это имя текстового файла в вашей системе.

После того как загрузится vi, вы увидите часть текстового файла, который вы загрузили, на вашем экране. Поздравляем - вы в vi! vi отличается от многих других редакторов тем, что когда он загружается, он входит в определенный режим, называющийся “режим команд”. Это означает, что если вы нажмете “l” на клавиатуре вместо того, чтобы просто вставить “l” в файл в текущей позиции курсора, курсор сдвинется на один символ вправо. В режиме команд символы на вашей клавиатуре используются для того, чтобы послать команды vi, а не для того, чтобы вставить буквенные символы в текст. Один из главных типов команд - команды перемещения, давайте рассмотрим некоторые из них.

Перемещение в vi

В режиме команд вы можете использовать клавиши h,j,k и l для перемещения курсора влево, вниз, вверх и вправо. Если вы используете одну из последних версий vi, вы можете также использовать для перемещений клавиши стрелок. Клавиши h,j,k и l удобны, когда-нибудь вы к ним привыкнете и сможете передвигаться по файлу, не убирая руки с привычных клавиш на клавиатуре. Попытайтесь использовать h,j,k и l (и клавиши стрелок) для передвижения в текстовом файле. Используйте h пока не попадете в начало строки. Запомните, что если вы находитесь в 1-й позиции строки, vi не позволит вам перейти в конец предыдущей строки, нажав клавишу h . Аналогично, вы не сможете перепрыгнуть на следующую строчку, нажимая l в конце строки.

В vi есть специальные горячие клавиши для быстрого перемещения в конец или начало текущей строки. Вы можете нажать 0 (ноль), чтобы возвратиться к первому символу строки и $ - к последнему. Нажмите их и увидите. Так как в vi существует столько различных удобных команд для перемещения, он является в некотором смысле “пейджером”. Использование vi как пейджер также поможет вам выучить все команды передвижения очень быстро.

Вы можете также использовать ^F (Ctrl-F) и ^B (Ctrl-B) для перемещения вверх и вниз на одну страницу. Современные версии vi (например, vim) также позволят вам использовать для этой цели клавиши PGUP и PGDOWN.

Перемещение по словам

vi также позволит вам передвигаться влево или вправо по словам. Чтобы переместиться к первому символу следующего слова, нажмите w. Чтобы переместиться к последнему символу следующего слова, нажмите e. Чтобы переместиться к первому символу предыдущего слова, нажмите b. Протестируйте эти команды.

После того, как вы поиграли с командами по перемещению по словам, вы, возможно, заметили, что vi рассматривает такие слова, как, например ” foo-bar-oni”, как 5 отдельных слов! Это происходит потому, что по умолчанию vi определяет границы слов пробелами или знаками пунктуации. Foo-bar-oni, таким образом, рассматривается как 5 слов: “foo”, “-”, “bar”, “-” и “oni”.

Иногда это то, что вам нужно, а иногда - совсем не то. К счастью, vi понимает также концепцию ” длинного слова “. vi определяет границы длинных слов только пробелами или символами перехода на новую строку. Это означает, что, несмотря на то, что foo-bar-oni и рассматривается редактором vi как 5 vi-слов, считается, что это одно длинное слово.

Чтобы перескочить к следующему или предыдущему длинному слову, вы можете использовать для команд перемещения по словам большие буквы. Используйте W, чтобы переместиться к первому символу следующего длинного слова, E - для последнего символа следующего длинного слова и B - для первого символа предыдущего длинного слова. Попробуйте эти команды и сравните оба типа команд то тех пор, пока вы не поймете их разницу.

Перемещение на большее расстояние

Давайте изучим еще несколько команд, прежде чем начнем их заносить в шпаргалку. Вы можете использовать символы ( и ) для перемещения в начало предыдущего или следующего предложения. Кроме того, вы можете нажать { или }, чтобы переместиться в начало текущего параграфа и в начало следующего. Проверьте их.

Выход

Мы рассмотрели основные команды перемещения, но есть еще несколько команд, которые вам необходимо знать. Напечатав :q, вы выйдите из vi. Если это не работает, возможно, вы случайно изменили каким-нибудь образом файл. Чтобы выйти из vi, не сохраняя какие-либо изменения, напечатайте :q!. Теперь вы находитесь в командной консоли.

В vi любая команда, которая начинается с “:”, как говорят, является командой “ex-режима”. Она называется так потому, что в vi встроен невизуальный редактор “ex-режима”. Он может быть использован так же, как и sed, для построчного выполнения операций редактирования. Кроме того, его так же можно использовать для выхода, как вы только что видели. Если вы нажмете клавишу Q во время действия в режиме команд, вы переместитесь в ex-режим. Когда это произойдет, появится подсказка :, а нажав Enter, вы прокрутит весь экран вверх. Чтобы вернуться в обычный vi-режим, просто напечатайте vi и нажмите Enter.

Редактирование и сохранение

Перемещение

Давайте продолжим наше быстрое изучение командных клавиш. В режиме команд вы можете переместиться в конкретную строку, напечатав <номер строки>G. Чтобы перескочить к первой строке файла, напечатайте 1G. Обратите внимание на то, что в данном случае G - заглавная буква.

Если вы хотите перескочить к следующему случаю использования определенного текстового шаблона, напечатайте /regexp и нажмите Enter. Замените regexp выражением, которое вы ищите. Если вы не знаете, как использовать стандартные выражения, не волнуйтесь, - напечатав /foo, вы переместитесь к следующему случаю использования foo. Единственная вещь, которую нужно остерегаться, - ссылка на символы ^, ., $ или . Перед этими символами стоит черта (backslash) . К примеру, /foo.gif найдет следующее использование “foo.gif”.

Чтобы продолжить поиск вперед, нажмите n. Чтобы продолжить поиск назад, нажмите N. Как всегда, опробуйте эти команды в вашем собственном vi-редакторе.

Сохранение

Мы рассмотрели, как вы можете использовать ex-команду :q, чтобы выйти из vi. Если вы хотите сохранить все изменения, нажмите :w. Если вы хотите сохранить все ваши изменения в другом файле, нажмите :w имя_файла.txt. Если вы хотите сохраниться и выйти, нажмите :x или :wq.

В vim (и других усовершенствованных редакторах vi, например, elvis) вы можете держать открытыми несколько буферов одновременно. Чтобы открыть файл в новом окне, нажмите :sp имя_файла.txt. имя_файла.txt откроется для редактирования в новом отдельном окне. Чтобы переключиться между окнами, нажмите ^w^w (Ctrl+w дважды). Любые команды :q, :q!, :w и :x, которые вы вводите, применяются для текущего активного окна.

Простое редактирование

Теперь пришло время начать изучать некоторые простые команды для редактирования. Команды, которые мы рассмотрим здесь, называются “простыми”, так как они будут выполняться в режиме команд. Более сложные команды для редактирования автоматически переведут вас в режим правки - режим, который поможет вам ввести буквенные данные с клавиатуры. Мы рассмотрим некоторые из них.

Теперь попытайтесь переместиться через несколько символов и нажать несколько раз на x. Вы увидите, что x удаляет текущий символ под курсором. Теперь перейдите к середине параграфа где-нибудь в вашем текстовом файле и нажмите J (заглавная буква). Вы увидите, что команда J служит для того, чтобы присоединить предыдущую строку к концу текущей строки. Теперь переместитесь на несколько символов и нажмите r и затем напечатайте новый символ; вы увидите, что изначальный символ был замещен новым. Наконец, переместитесь в любую строку файла и нажмите dd. Вы увидите, что dd удаляет текущую строку текста.

Повторение и удаление

Вы можете повторить любую команду редактирования, нажав клавишу “.”. Ради эксперимента удостоверьтесь, что dd… удалит 4 линии, а J… добавит 4 линии. Как обычно, в vi есть другие удобные горячие клавиши.

Чтобы удалить текст, вы можете также использовать команду d в сочетании с любой командой перемещения. К примеру, dw удаляет символы с текущей позиции до начала следующего слова; d) удаляет с начала и до конца следующее предложение, а d} удалит оставшуюся часть параграфа. Поэкспериментируйте с командой d и другими командами редактирования до тех пор, пока вы уверенно не начнете пользоваться ими.

Отмена команды

Теперь, вдоволь поэкспериментировав с командами удаления, будет полезно изучить, как отменить любые изменения. Нажав u, изначальная версия vi позволит вам отменить только последнее сделанное изменение. Однако, последние версии vi, такие как vim, позволяют вам несколько раз нажимать на u и продолжать отменять изменения, которые вы сделали в вашем файле. Попытайтесь комбинировать некоторые команды d и u вместе.

Режим правки

Основы режима правки

До сих пор мы рассматривали, как перемещаться по vi, преобразовывать файл и выполнять основные операции редактирования. Однако я даже не показал вам, как просто писать текст в свободной форме! Этого я не сделал специально, так как режим правки в vi несколько сложен на первых порах. Однако после того как вы привыкните к режиму правки, его сложность (и гибкость) станут преимуществом.

В режиме правки vi вы можете ввести текст прямо на экран так же, как можете это сделать в любых других визуальных редакторах. Когда вы отредактировали все, что хотели, вы можете нажать Esc для возврата в режим команд. Вы можете перейти в режим правки, нажав i или a. Если вы нажмете i, ваш текст вставится перед текущим символом, если вы нажмете а, ваш текст прибавится после текущего символа. Запомните, после того как вы ввели текст, нажатие Esc вернет вас в режим команд.

Преимущества режима правки

Используйте команды a и i. Введите либо a, либо i, напечатайте какой-нибудь текст и затем нажмите Esc для возврата в режим команд. После нажатия a или i, попробуйте нажать Enter и посмотрите, что происходит. Используйте клавиши стрелок и клавишу delete, чтобы понять, как работает режим правки. Используя клавиши стрелок и клавишу delete, вы можете выполнить важнейшие команды редактирования без постоянного перехода в режим правки и обратно.

Опции режима правки

Сейчас мы рассмотрим другие удобные пути перехода в режим правки. Нажмите A (заглавная буква) для того, чтобы начать вводить текст в конце текущей строки, независимо от позиции в строке, в которой вы в данный момент находитесь. Также нажмите I (заглавная буква), чтобы начать вставлять текст в начало текущей строки. Нажмите o, чтобы создать новую пустую строку снизу от текущей строки, в которой вы можете вводить текст, и нажмите O (заглавная буква), чтобы создать новую строку сверху от текущей. Чтобы заменить целую текущую строку новой строкой, напечатайте cc. Чтобы заменить все, начиная с текущей позиции и заканчивая последним символом в строке, напечатайте c$. Чтобы заменить все, начиная первым символом в строке и заканчивая текущим, напечатайте c0.

В добавление к вышесказанным командам, заметим, что каждая из команд переведет вас в режим правки. После работы с текстом, нажмите Esc, чтобы вернуться в режим команд.

Изменение текста

Мы уже немного использовали команду c (изменить), когда печатали cc, c0 и c$. cc - специальная команда изменения, подобная dd. Команды c0 и c$ - примеры использования команд изменения в комбинации с командами перемещения. В этом виде c работает подобно d за исключением того, что она переводит вас в режим правки, поэтому вы можете ввести любой текст вместо удаленных символов. Попытайтесь комбинировать несколько команд передвижения и команду c и протестируйте их в вашем файле (к примеру: cW, ce, c( .)

Сложные команды

vi становится действительно мощным средством, когда вы начинаете использовать сложные (”combo”) команды, например d{ и cw. В добавление к этим командам, вы также можете комбинировать число с любой командой перемещения, например 3w, которая служит для перемещения на три слова вправо. Вот еще несколько примеров “combo”-команд передвижения: 12b, 4j.

Кроме того, что vi позволяет комбинации “число-команда”, он также позволяет соединение d или c с числом и командой передвижения. Так, к примеру, d3w удалит следующие три слова, d2j удалит текущую и две новых линии и.т.п. Проверьте несколько сочетаний, чтобы понять, насколько мощное и точное средство vi, и чтобы уверенно пользоваться им. Так как сочетание этих команд разнообразно, вы теперь можете редактировать файлы чрезвычайно быстро.

Возможности производительности

Чем дальше, тем лучше

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

Однако vi также содержит и более мощные команды. В этом разделе я научу вас вырезать, копировать и вставлять, осуществлять поиск и замену, а также использовать методы автоматического отступа. Эти команды помогут сделать работу с vi лучше и продуктивнее.

Визуальный режим

Лучший способ вырезать и вставить - использовать визуальный режим, - специальный режим, который добавлен к последним версиям vi, таким как vim и elvis. Считайте, что визуальный режим - это режим подсветки текста. Когда текст подсвечен, его легко можно копировать и удалить, а затем вставить.

Нажав v, вы переходите в визуальный режим. Вы увидите слово viSUAL внизу слева вашего редактора, как показано на рисунке 3. Затем, переместив курсор, используя команды передвижения (в основном, клавиши стрелок), вы сможете подсветить область текста. Если ваш менеджер Window понимает нажатие на клавиши мышки, вы можете также подсветить текст, удерживая левой кнопкой мышки определенную часть текста, которую необходимо подсветить.

Когда текст подсвечен, вы можете вырезать или копировать его. Если вы копируете текст, нажмите y. Если вы вырезаете текст, нажмите d. Вы перейдете обратно в режим команд. Теперь перейдите к месту, где бы вы хотели вставить вырезанный или скопированный текст, и нажмите P, чтобы вставить текст после курсора или p - до курсора. Вот и все, процесс вырезания/копирования и вставки закончен! Выполните несколько таких операций, прежде чем продолжить.

Замена текста

Чтобы заменить некоторые части текста, мы используем ex-режим. Если вы хотите заменить первое выражение, которое появляется в текущей строке, напечатайте :s/regexp/replacement/ и нажмите Enter, где regexp - это выражение, которое вы хотите подобрать, а replacement - это замена строки. Чтобы заменить все соответствующие случаи употребления в текущей строке, напечатайте :s/regexp/replacement/g и нажмите Enter. Чтобы заменить все случаи в вашем файле (как раз обычно это и требуется), напечатайте :%s/regexp/replacement/g. Если вы захотите сделать общую замену, но чтобы для каждого изменения появлялось vi-напоминание, напечатайте :%s/regexp/replacement/gc и нажмите Enter.

Отступ

vi поддерживает автоматический отступ, если вы редактируете исходный код. Большинство последних версий vi (например, vim) автоматически переходит в режим автоотступа, когда вы редактируете файл исходного кода (например, .c-файл). Когда стоит автоматический отступ, вы можете использовать ^d (Ctrl + d) для перемещения на один отступ влево и ^t (Ctrl + t) - вправо. Если автоматически вы не перешли в режим автоотступа, вы можете вручную войти в него, напечатав в ex-режиме :set autoindent. Вы можете также установить размер табуляции, использовав команду :set tabstop, часто используется команда :set tabstop=4.

Источник http://www.ibm.com/developerworks/

Обновлено: 13.03.2015