Описание
Редактор vi - один из первых редакторов, разработанных для операционных
систем UNIX. Он и по сей день остается одним из самых мощных редакторо
и стандартно поставляется практически с каждой операционной системой типа
UNIX. К сожалению, среди новичков редактор vi пользуется репутацией
программы, известной своей загадочностью и трудностью в изучении. В нем
отсутствует меню, и все действия осуществляются с помощью клавиш и клавиатурных
комбинаций. Понятно, что на их изучение требуется время.
Так зачем же изучать этот редактор? Есть, по меньшей мере, 2 причины.
Во-первых, он имеется в любой операционной системе типа UNIX, с которой
вам, может быть, придется работать. Как знать, он может оказаться единственным
редактором.
Во-вторых, когда вы изучите различные комбинации клавиш и команды, окажется,
что в вашем распоряжении очень мощное средство. Если вы хорошо печатаете,
редактор vi обеспечит возможность очень быстрой работы, так как
для набора большинства команд не потребуется убирать руки с базовых клавиш.
Редактор vi работает в двух режимах - командном и набора текстов.
Сразу после запуска vi находится в командном режиме. В этом режиме нажатия
клавиш интерпретируются как команды редактору, а не как текст, вводимый
в документ.
Чтобы переключиться в режим ввода текста, необходимо нажать одну из клавиш:
a, i или o.
Клавиша a означает append (присоединить). В этом режиме
вводимый текст вставляется после символа, на котором находится курсор.
Клавиша i означает insert (вставить). В этом режиме вводимый
текст вставляется перед символом, на котором находится курсор.
И, наконец, клавиша o означает open (открыть). Это приводит
к тому, что после строки, на которой находится курсор, в текст вставляется
новая строка. Затем курсор перемещается на новую строку, и редактор переходит
в режим insert, разрешая ввод текста на новой строке.
Имеется также несколько других команд для установки режима ввода текста,
которые применяются не так часто. Это команда O, которая добавляет
пустую строку над текущей строкой; и команда A, которая начинает
вставлять текст в конце текущей строки.
Из режима ввода текста в командный режим можно вернуться нажатием клавиши
Esc. При переходе в командный режим редактор vi по умолчанию
выдает звуковой сигнал.
Перемещение по тексту в редакторе vi
Перемещаться по тексту в режиме ввода текста можно, как правило, с помощью
курсорных клавиш или клавиш Page Up / Page Down. Однако на терминале это
не всегда функционирует. Кроме того, на некоторых терминалах эти клавиши
могут отсутствовать. На этот случай имеются другие клавиши, позволяющие
перемещаться по документу в командном режиме.
Чтобы воспользоваться этими клавишами перемещения, нажмите клавишу Escape
для перехода в командный режим. В этом режиме можно пользоваться клавишами
h, j, k и l для перемещения курсора влево,
вниз, вверх и вправо. Вот несколько советов, которые помогут запомнить
их назначение:
l - крайняя справа и поэтому перемещает курсор вправо.
h - крайняя слева и перемещает курсор влево
j - немного похожа на стрелку, направленную вниз. Соответственно,
она перемещает курсор вниз
С буквы k начинается слово kaif :), при котором душа улетает
вверх - вместе с курсором.
В командном режиме имеется еще несколько клавиш перемещения. В таблице
приведены различные клавиши и их функции.
|
клавиша
|
действие
|
| h |
перемещает курсор влево на 1 символ |
| j |
перемещает курсор вниз на 1 символ |
| k |
перемещает курсор вверх на 1 символ |
| i |
перемещает курсор вправо на 1 символ |
| w |
перемещает курсор вперед на 1 слово |
| b |
перемещает курсор назад на 1 символ |
| e |
перемещает курсор в конец следующего слова |
| 0 |
перемещает курсор в начало строки |
| $ |
перемещает курсор в конец строки |
| ) |
перемещает курсор в начало следующего предложения |
| ( |
перемещает курсор в начало предыдущего предложения |
| } |
перемещает курсор в начало следующего абзаца |
| { |
перемещает курсор в начало предыдущего абзаца |
| G |
перемещает курсор в конец текущего документа |
| ^ |
перемещает курсор к первому символу строки, не
являющемуся пробелом |
| H |
перемещает курсор на первую строку на экране |
| L |
перемещает курсор на последнюю строку на экране |
Обратите внимание, что с каждой командой этой таблицы по умолчанию используется
число 1. Клавиша j перемещает вниз на 1 строку, клавиша k
перемещает его вверх на 1 строку, и так далее. Все эти команды можно модифицировать,
вводя перед ними число. Так, следующая команда перемещает вниз не на одну
строку, а на пять:
5j
Следующая команда перемещает курсор на 75-ю строку файла, редактируемого
в данный момент:
75G
А вот команда, которая перемещает курсор на пятую снизу строку экрана:
5L
Данный синтаксис справедлив для всех команд из таблицы, за исключением
команды ^, которая перемещает курсор к первому символу документа,
не являющегося пробелом.
Прочие клавиши перемещения
Помимо описанных выше клавиш перемещения курсора, имеется еще несколько
клавиатурных комбинаций, выполняющих прокрутку текста на экране (см. ниже):
|
комбинация клавиш
|
действие
|
| z, затем Enter |
Перемещает строку, на которой находится курсор,
вверх экрана |
| z, затем - |
Перемещает строку, на которой находится курсор,
вниз экрана |
| z, затем . |
Перемещает строку, на которой находится курсор,
в центр экрана |
| Ctrl+u |
Прокручивает текст на пол-экрана вверх |
| Ctrl+d |
Прокручивает текст на пол-экрана вниз |
| Ctrl+f |
Прокручивает текст вперед на целый экран |
| Ctrl+b |
Прокручивает текст назад на целый экран |
| Ctrl+e |
Прокручивает текст вниз на 1 строку |
| Ctrl+y |
Прокручивает текст вверх на 1 строку |
Команды редактирования текста
В редакторе vi клавиши Backspace и Delete не выполняют тех действий, которых
от них можно ожидать. Для удаления текста и тому подобного придется воспользоваться
различными клавишами в командном режиме редактора. В таблице перечислены
различные команды редактирования текста, имеющиеся в редакторе vi.
|
клавиша
|
действие
|
| D |
Удаляет текст от позиции курсора до конца строки |
| dd |
Удаляет всю строку целиком. |
| ndd |
Здесь n - число удаляемых строк. Например, 5dd
удаляет текущую строку и четыре следующие за ней |
| rc |
Здесь c - символ. Это команда заменяет символ
в позиции курсора символом, который указан за r |
| R |
Текст, вводимый после этой команды, замещает текущий
текст, начиная с позиции курсора. Этот режим действует до тех пор,
пока не будет нажата клавиша Escape, возвращающая редактор в командный
режим. |
| S |
Удаляет текущую строку и начинает ввод текста
на новой строке. |
| x |
Удаляет символ в позиции курсора и сдвигает следующие
за ним символы влево. |
| X |
Удаляет символ перед курсором и сдвигает
следующие за ним символы влево. |
| ~ |
Заменяет букву на позиции курсора той же буквой
другого регистра. |
| J |
Объединяет текущую строку с предыдущей. |
Операции над файлами и выход из редактора vi
Это операции загрузки и сохранения файлов в редакторе vi.
|
Клавиша
|
Действие
|
| ZZ |
Сохраняет изменения в текущем файле и осуществляет
выход из программы |
| :wq |
Аналогично ZZ |
| :w |
Сохраняет изменения в текущем файле |
| :w! |
Сохраняет изменения в текущем файле, замещая существующий
файл с таким же именем |
| :q |
Осуществляет выход из программы. Если имеются
несохраненные изменения, редактор выдает сообщение об этом и программа
не закрывается. |
| :q! |
Осуществляет выход из редактора, даже если имеются
несохраненные изменения, которые теряются. |
| :e filename |
Загружает указанный файл в редактор для редактирования.
Если заданный файл не существует, то создается новый файл. |
| :e! |
Отбрасывает все изменения и перезагружает с диска
старый фариант файла. |
Поиск в тексте и замена текста в редакторе vi
В редакторе vi имеются несколько команд для выполнения поиска и замены.
|
Клавиша(и)
|
Действие
|
| /шаблон |
Здесь шаблон - это фрагмент текста (слово, словосочетание,
фраза и т.п.), который требуется найти. Редактор осуществляет поиск
в файле в прямом направлении до первого совпадения с заданным шаблоном. |
| / |
Повторяет поиск заданного образца в прямомо направлении
до обнаружения следующего совпадения. |
| ?шаблон |
Здесь шаблон - это фрагмент текста, который требуется
найти. Редактор осуществляет поиск в файле в обратном направлении
до первого встреченного совпадения с заданным шаблоном. |
| ? |
Повторяет поиск шаблона в обратном направлении
до обнаружения очередного совпадения. |
| % |
Перемещает курсор на соответствующую парную скобку. |
| :s/шаблон1 /шаблон2 |
Заменяет в текущей строке каждое совпадение шаблона1
на шаблон2 |
| :%s/шаблон1 /шаблон2 |
Заменяет во всем файле каждое совпадение шаблона1
на шаблон2 |
Копирование, вырезание и вставка текста в редакторе vi
|
Команда
|
Действие
|
| yw |
Помещает в буфер слово, на котором в данный момент
находится курсор. |
| y$ |
Помещает в буфер текст от текущей позиции курсора
до конца данной строки. |
| yy |
Помещает в буфер всю текущую строку |
| nyy |
Здесь n - число строк, заносимых в буфер. Например,
команда 5yy помещает в буфер текущую строку, а также 4 строки,
следующие за ней. |
Текст из буфера можно вставить на любое место документа, перемещая на
требуемое место курсор и применяя команду р или Р. Команда
р вставляет текст в документ после курсора. Команда Р вставляет
текст перед курсором. Текст продолжает оставаться в буфере и после того,
как вы вставите его в документ. Поэтому можно снова использовать эти команды
для вставки текста в документ в других местах.
Предостережение
Редактор vi хранит в буфере текст только самой последней операции
копирования текста в буфер или удаления. Другими словами, если ты выполнил
команду dd, чтобы удалить строку текста, а потом выполнил команду
yy, чтобы скопировать строку текста, то в буфере текст, с которым
оперировала команда dd, будет замещен текстом операции yy.
Это означает, что текст из операции dd будет потерян, т.е. операцию удаления
отменить будет невозможно...
|