вторник, 16 февраля 2010 г.

Основы использования редактора VI


Текстовый консольный редактор VI встроен во все Unix-системы и ему около 40 лет. Это серьезный возраст, и он ему соответствует. Нет повода, чтобы не написать пару строк об этом замечательном явлении.

Человек из мира Windows встает в продолжительный ступор оказавшись в консоли этого редактора. И, обычно, закрывает его. И забывает, открыв для себя с радостью Pico, Nano, etc.

Но все равно, рано или поздно, вы с ним сталкиваетесь. От VI не уйти ;-). Поэтому опишу основные команды для работы в этом редакторе и приведу ссылки на тематические ресурсы.

Основы основ

Чтобы открыть для редактирования уже существующий файл, путь к этому файлу нужно указать в качестве параметра: "vi путь_к_файлу".

Пока буфер не заполнен текстом, в начале каждой строки экрана отображается символ "~", обозначающий, что в этом месте буфера нет ничего, даже пустой строки.

Кстати, у vi, конечно же, есть конфигурационный файл. Он называется .exrc и находится в домашнем каталоге.

Наконец, чтобы ввести текст, нужно перейти из командного режима в режим вставки, нажав клавишу "i".

Например, по командам "O" и "o" ("open") можно вводить текст с новой строки (до или после текущей), по команде "I" – с начала строки, команды "a" и "A" ("append") ведают добавлением символов (после курсора или в конец строки) и т. п.

Передвинуть курсор на начало текущей строки можно командой "0", на первый непробельный символ в строке – "^", в конец строки – "$".


Абзацами Vi считает фрагменты текста, разделенные пустой строкой, к началу предыдущего/следующего абзаца можно попасть командами "{" и "}" соответственно. Очень распространенная задача – необходимость попасть в самый конец файла: для этого служит команда "G" ("Go"), в самое начало – "gg".

Часто используемые команды

* :q — выход
* :q! — выход без сохранения файла
* :w — сохранить файл на диске
* :wq — выход с сохранением файла
* :e! — перезагрузить текущий файл
* :33 — перепрыгнуть на 33ю строку текстового файла
* i — перейти в режим редактирования
* u — отменить последнее действие
* x — удалить символ под курсором
* dd — удалить всю строку
* /qso — найти слово qso в тексте после курсора
* Esc → :wq → Enter — выйти из файла, сохранив его;
* Esc → :q! → Enter — выйти из файла, не сохранив его.

Чтобы получить подробную помощь по редактору vi, выполните команду man vi в Unix shell (q — выход из справки).

Основные команды vi

vi filename Вызов редактора vi для редактирования файла filename
a Добавить текст после курсора (переход в режим ввода)
Перейти из режима ввода в командный режим
h Переместить курсор на один символ влево
j Переместить курсор вниз на одну строку
k Переместить курсор вверх на одну строку
l Переместить курсор на один символ вправо
x Удалить символ

:w Записать в файл
:q Завершить работу с vi
:q! Завершить работу с vi без сохранения файла
:wq Записать буфер в файл и завершить работу с vi
ZZ Записать буфер в файл и завершить работу с vi

Позиционирование курсора

h Переместить курсор на один символ влево
j Переместить курсор вниз на одну строку
k Переместить курсор вверх на одну строку
l Переместить курсор на один символ вправо
$ Переместить курсор на последний символ в строке
0(ноль) Переместить курсор на первый символ в строке
^ Переместить курсор на первый не пустой символ в строке

w Переместить курсор к началу следующего слова
W Переместить курсор к началу следующего слова, не учитывая все знаки пунктуации

1G Перейти к первой строке в файле
G Перейти к последней строке в файле
nG Перейти к строке номер n в файле
:set num Показывать номера строк в файле
:set nonum Не показывать номера строк в файле

^f Прокрутить экран вперёд на полное окно.
^b Прокрутить экран назад на полное окно.

Поиск и замена текста по шаблону (*)

/pattern Поиск вперёд в буфере до первого появления шаблона pattern.
?pattern Поиск назад в буфере до первого появления шаблона pattern.
n Повторить последнюю команду поиска

:s/pattern/new_text/ Заменить первое появление шаблона pattern в текущей строке на new_text
:s/pattern/new_text/g Заменить каждое появление шаблона pattern в текущей строке на new_text
:g/pattern/s//new_text/g Заменить каждое появление шаблона pattern в файле на new_text

* В шаблоне (pattern) работают регулярные выражения (RE - Regular Expressions). Подробнее про регулярные выражения можно найти в IBM AIX InfoCenter.

Ввод, удаление и замена текста

a Создать текст после курсора (переход в режим ввода)
A Создать текст в конце текущей строки (переход в режим ввода)
i Создать текст перед курсором (переход в режим ввода)

o Вставить новвую строку ниже текущей строки и перейти в неё (переход в режим ввода)
O Вставить новвую строку выше текущей строки и перейти в неё (переход в режим ввода)

В режиме ввода: удалить текущий символ
x Удалить текущий символ
dw Удалить слово над курсором (текст помещается во временный буфер)
dW Удалить слово и пунктуацию над курсором (текст помещается во временный буфер)
dd Удалить текущую строку (текст помещается во временный буфер)
rx Заменить текущий символ на символ x
R Перейти в режим ввода с заменой текста


Дополнительные команды

u Отменить последнюю команду
. Повторить последнюю команду
j Соединить текущую строку со строкой, расположенной ниже
yy Скопировать строку во временный буфер
p Поместить содержимое временного буфера, полученное с помощью команды y или команд удаления, в текст после курсора
:show mode Показывать режим работы vi в строке статуса (командный или ввода)


Работа с файлами и выход из редактора

ZZ Записать текст в файл и завершить работу с vi
:wq Записать текст в файл и завершить работу с vi
:w Записать текст в файл
:w! Записать текст в файл, даже при недостатке прав доступа (если вы владелец файла или root)
:q Завершить работу с vi без записи текст в файл, если буфер не изменялся
:q! Завершить работу с vi без записи текст в файл, даже если текст изменялся
:w filename Записать текст в новый файл filename
:w! filename Перезаписать содержимое текста в уже существующий файл filename

Отечественные ресурсы по теме VI

http://www.intuit.ru/department/os/linux/9/
http://www.aixportal.ru/content/view/23/139/
http://ru.wikipedia.org/wiki/Vi

VIM

http://www.vim.org/

Комментариев нет: