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.