5.4 Полноэкранный редактор vi

Редактор vi — универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.). Эта универсальность выражается непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь «обычные» кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).

Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но в ограниченном контексте.

Режимы работы редактора

Ввод текста

В этом режиме все, что набирается на клавиатуре отображается на экране терминала и запоминается в буфере редактора.

В данном режиме нет возможности осуществлять операции редактирования текста, за исключением стирания последнего набранного символа (с помощью комбинации клавиш  < Control-H> ).

Командный режим

В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.

В данном режиме набираемые команды не отображаются на экране.

Режим командной строки

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

Команды отображаются в нижней части экрана (в командной строке редактора).

Ввод текста

< Return>  — создает пустую строку и переводит курсор в ее начало;

< Control-H>  — уничтожает последний введенный символ (это действие не отображается на экране до выхода в командный режим);

< Control-[>  или клавиша < Esc>  — переводят редактор в командный режим.

В режиме ввода текста стрелочная клавиатура не работает.

Команды

i — переход в режим набора методом вставки перед текущим символом;

a — переход в режим набора методом вставки за текущим символом;

R — переход в режим набора текста методом набивки.

Перемещение курсора

h, j, k, l — на один символ (одну строку), как показано стрелками;

^ или 0 — в начало текущей строки;

$ — в конец текущей строки;

w — на слово вправо;

b — на слово влево;

} — на параграф вперед (параграф — это блок текста, отделенный пустой строкой);

{ — на параграф назад;

[[ — в начало текста;

]] — в конец текста.

Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.

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

dd — стирание текущей строки;

d<движение курсора> — стирание от текущего положения курсора до нового, задаваемого символом перемещения курсора. Нажатие кнопок стрелочной клавиатуры не является движением курсора и не может использоваться в комбинированных командах;

J — слияние текущей строки со следующей;

u — отмена последней команды;

. — повтор последней команды;

: — переход в режим командной строки.

Командная строка

:q или :q! — выход из редактора без сохранения изменений;

:x- выход из редактора с записью, если файл был модифицирован;

:w или w filename или w! filename — запись файла и возвращение в командный режим;

:e filename или :e! filename — загрузка файла filename;

:r filename — добавить содержимое указанного файла к редактируемому сразу за текущей строкой;

:set nu — включить нумерацию строк;

:set nonu — отключить нумерацию строк;

:!command — выполнить команду UNIX не покидая редактора;

:/word — выполнить поиск слова word в тексте;

:/ — повторить поиск слова word далее по тексту.

Блоки, буферы, окна редактирования. Повторители

Повторители

Командам и движениям курсора можно давать повторители (числа), например:

2w — передвинуть курсор на два слова вперед

10l — передвинуть курсор на десять символов вправо

d10l — стереть десять символов справа от курсора

2d10l — стереть двадцать символов справа от курсора

5J — слить пять последующих строк в одну

4. — повторить последнюю введенную команду четыре раза

Буферы vi

Редактор имеет три типа буферов: буфер стирания (0-9), неименованный буфер и именованные буферы (a-z).

В буферы стирания автоматически заносятся стираемые элементы. В буфере 0 хранится последний стертый элемент, в буфере 1 — предпоследний и т. д.

Занести в буфер:

yy — занести текущую строку в неименованный буфер;

yдвижение курсора — занести указанный движением курсора блок текста в неименованный буфер.

«ayy — занести текущую строку в именованный буфер a;

«Ayy — добавить текущую строку к содержимому именованного буфера a;

«by10j — занести последующие 10 строк в именованный буфер b.

Вставить из буфера:

p — вставить в текущую позицию содержимое неименованного буфера;

«ap — вставить в текущую позицию содержимое именованного буфера a;

«1p — вставить в текущую позицию содержимое буфера стирания 1.

Многооконное редактирование

Редактировать сразу несколько файлов можно либо пользуясь командной редактора :e filename, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:

:n — переходим к следующему файлу в списке;

:rew — возвращаемся к редактированию первого файла в списке.

Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.

Открыть/создать файл

vi mamapapa.txt — открыть один файл.

vi mama.txt papa.txt — открыть файл mama.txt, после выхода из него открыть файл papa.txt.

Файл открывается в командном режиме с помощью команды vi. Здесь мы можем просмотреть файл, переместиться по его содержимому, стереть текст, но внести изменения или ввести текст в этом режиме нельзя.

Создание файла происходит при помощи той же команды. Создание файла происходит в момент сохранения.

Для открытия или создания нового файла в командном режиме необходимо выполнить команду:

:e filename

Перед этим нужно сохранить предыдущий файл:

:w — сохраняет файл с существующим именем или :sav filename — «Сохранить как».

Дополнительные опции

Дополнительные возможности редактора:

Команда Описание команды
G перейти в конец файла
<number>G перейти на конкретную строку <number>
:<number> перейти на <number> строк вперед
:set nu[mber] отобразить слева нумерацию строк (^ nonu[mber] — спрятать нумерацию)
:set wrap переносить длинные строки (:set nowrap — не переносить)
:syntax on/off включить/выключить подсветку синтаксиса
:colorscheme <name> задать цветовую тему (где <name> — имя темы, TAB работает как авто-дополнение)
/мама поиск текста «мама» в файле
n повторить поиск
:h или :help список возможной помощи (:viusage, :exusage)
:set fileformat=dos :set fileformat=unix привести концы строк в файле к виду dos или unix, соответственно
:set ts=4 задать размер табуляции в 4 пробела

 

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.