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

Режимы работы редактора
Ввод текста
Команды
Перемещение курсора
Редактирование
Командная строка
Блоки, буферы, окна редактирования. Повторители
Открыть/создать файл
Дополнительные опции
Улучшенный редактор VIM

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

 

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

Ввод текста

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

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

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

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

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

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

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

 

Ввод текста

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

«Ctrl+H» — уничтожает последний введенный символ (это действие не отображается на экране до выхода в командный режим);

«Ctrl+[» или клавиша «Esc» — переводят редактор в командный режим.

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

 

Команды

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

 

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

h, j, k, l — на один символ (одну строку), как показано стрелками;
^ или 0 — в начало текущей строки;
$ — в конец текущей строки;
w — на слово вправо;
b — на слово влево;
} — на параграф вперед (параграф — это блок текста, отделенный пустой строкой);
{ — на параграф назад;
[[ — в начало текста;
]] — в конец текста.
Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.

 

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

Предположим, в нашем файле записан текст, который необходимо отредактировать. Для этого необходимо перейти в режим ввода. Самый простой способ — из командного режима нажатие клавиши «i». После чего можно приступать к вводу текста. <ESC> вернет нас к командному режиму.

Другие важные команды:

Команда

Описание команды

R,i

переход в режим ввода — замена текста под курсором

I

переход в режим ввода с начала текущей строки

o

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

O

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

a

переход в режим ввода после курсора

x

стирание символа под курсором

X

стирание символа перед курсором

dd

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

d<число>d

стирание числа строк, начиная с текущей

yy

копирование текущей строки в неименованный буфер

y<число>у

копирование числа строк начиная с текущей в неименованный буфер

p

вставка строки из неименованного буфера под курсор

P

вставка строки из неименованного буфера над курсором

J

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

u

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

.

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

:

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

 

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

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

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

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

:e <имя_файла> или :e! <имя_файла> — загрузка файла <имя_файла>;

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

: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 <имя_файла>, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi <файл_1> <файл_2> <файл_3>). В последнем случае вы двигаетесь по списку файлов с помощью команд:
:n — переходим к следующему файлу в списке;
:rew — возвращаемся к редактированию первого файла в списке.
Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.

 

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

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

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

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

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

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

:e <имя_файла>

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

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

 

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

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

Команда Описание команды
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 пробела

 

Улучшенный редактор VIM

Vim расшифровывается как Vi Improved, улучшенный vi. В сравнении с классическим vi Vim отличается следующими улучшениями:

  • Работа со многими файлами одновременно. Разбиение окон редактирования может производиться многократно как по горизонтали, так и по вертикали.
  • Поддержка Unicode.
  • Поддержка визуального режима, который позволяет, например, выполнять операции над блоками текста.
  • Неограниченная глубина отмены (undo) и возврата (redo) действий.
  • Режим сравнения двух файлов, перенос отдельных изменений из одного файла в другой.
  • Широкая файловая поддержка (файл со справкой и более 200 файлов с описанием синтаксиса).
  • Подсветка синтаксиса, автоматическое определение величины отступа для каждой строки в зависимости от языка программирования (изначально поддерживает более 200 языков программирования и форматов конфигурационных файлов).
  • Интеграция с операционной системой, дающая возможности, близкие к интегрированным средам разработки, такие как поиск ошибки по сообщению компилятора, автодополнение идентификаторов и др.
  • Поддержка языка сценариев; возможность написания модулей расширения — плагинов.
  • Автоматическое продолжение команд, слов, строк целиком и имён файлов.
  • Автоматический вызов внешних команд (например, автоматическая распаковка файла перед редактированием).
  • Распознавание и преобразование файлов различных форматов.
  • Удобный механизм истории команд, поисковых слов и т. д.
  • Запись и исполнение макросов.
  • Возможность сохранения настроек и сеанса.
  • Возможна интеграция с языками программирования Perl, Tcl, Python и Ruby.
  • Поддержка языков с письмом справа налево (арабских и других).
  • Сворачивание (folding) текста для лучшего обзора.
  • Возможно использование графического интерфейса в специальных версиях (GTK, Motif, …).
  • Хорошо конфигурируется и настраивается под нужды пользователя.
  • Для программистов: поддержка цикла разработки «редактирование — компиляция — исправление» программ. Автоматическое выполнение сборки/компиляции, обнаружение и распознавание ошибок, переход к строкам ошибок в тексте программы.

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

В ViM существуют 3 режима работы:

Основной — предназначен для просмотра файла, ввода команд и перехода из него в другие режимы. Из любого режима в командный можно попасть по нажатии «ESC». При нажатии клавиши «:» становится доступна командная строка ViM, в которой можно вводить команды. Основные команды — команда выхода quit (ViM понимает сокращения, поэтому можно давать команду одной буквой «q»), команда сохранения write (или «w»), параметром которой может быть имя файла и вызов справки по, очевидно, help (или «h»). На остальные клавиши (и их последовательности) можно присвоить любое действие, либо использовать значения по умолчанию.

Визуальный – предназначен, в первую очередь, для выделения блоков текста. Для запоминания предлагаются 3 варианта перехода в этот режим – клавишей «v» для посимвольного выбора, «Shift+v» для построчного и «Ctrl+v» для блочного. В нормальном режиме (при переходе по «v») можно оперировать следующими сущностями: слово («w»), предложение («s»), параграф («p») и блок («b»). Выделение при этом начинать с позиции курсора («a»), или же с начала блока («i»). Например, выделение текущего блока (участка, ограниченного парными элементами) можно произвести следующим образом «Esc+vib». Копирование в буфер выделенного текста осуществляется по «y», вырезание по «d», а вставка соответственно «p».

Режим редактирования — переход в режим редактирования осуществляется нажатием клавиши «Ins».

Основные возможности

Все возможности и команды редактора ViM перечислить весьма затруднительно (HTML-документация по нему занимает около пяти мегабайт), но на группе наиболее полезных остановиться необходимо. Перечисленные ниже команды вводятся в основном режиме (если нет специального уточнения). Все они имеют команднострочные аналоги и могут быть легко переопределены пользователями.

 

Переходы

Для перехода на строку с номером n воспользуйтесь командой G. Так, для перехода к началу текста наберите 0G, для сотой строки 100G, а для конца документа — $G. Для перехода на n символов в нужную вам сторону можете использовать клавиши со стрелками. То есть для перехода на 1000 символов вниз наберите 1000 и нажмите стрелку вниз.

Для перемещения по тексту используйте следующие команды: «(», «)» для перемещения по предложениям, «{», «}» для параграфов, «[[», «]]» для функций, «%» — переход к парной скобке, «’ ‘» — к предыдущему положению, а «CTRL+O», «CTRL+I» — соответственно назад и вперед по истории переходов.

 

Метки

Используются для отметки позиции ^метка, где меткой является любая буква и быстрого к ней перехода (метка). Метки нижнего регистра действительны в пределах данного файла, метки же верхнего регистра действуют во всех открытых файлах. Список всех меток можно получить командой marks.

 

Регистры

В редакторе доступно множество именованных регистров (хранилищ данных, буферов). Регистр отмечается «’ ‘буква». К нему применимы все стандартные действия — копирование в него («меткаy), вырезание («метка^), и вставка из него (‘ ‘меткаp, можете вместо p использовать [p,]p для вставки соответственно перед, или после курсора). В режиме редактирования вставка из регистра осуществляется по «Ctrl+R метка». Для добавления данных в регистр используйте заглавную метку.

Также вы можете писать в регистр, воспользовавшись командой «^метка» и завершая запись по «q». Таким образом, вы сохраняете макрос, выполнить который можно по «@метка».

Регистры с метками «*» и «+» совпадают с X-Window clipboards, «%» — соответствует редактируемому файлу. Для просмотра содержимого всех регистров воспользуйтесь командой :registers, либо :reg <метка_1><метка_2>… для просмотра некоторых.

 

Фолды

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

set foldmethod=indent

Все команды для работы с фолдами начинаются с «z». Открытие фолда производится, например, по zo (или стрелке вправо) на нем, закрытие кода в фолд — по zc.

 

Сессии

При ведении группы проектов нередко желательно сохранить текущее состояние и настройки редактора, чтобы в дальнейшем продолжить работу с того же места. Для этого и предназначены сессии, что создаются командой :mksession /path/to/Session.vim, а читаются простой командой :so /path/to/Session.vim. Гораздо чаще, впрочем, возникает нужда в сохранении не всей сессии, но только текущего контекста (вo что входит, например, положение курсора в коде, текущая расстановка фолдов и многоe другое, о чем читайте в документации). Это действие выполняет команда :mkview, чтение — :loadview. Очень удобно сделать сохранение и чтение контекста автоматическим при начале и окончании редактирования файла. Это может быть реализовано следующим кодом (применяется для всех файлов, имеющих точку в имени):

au BufWinLeave *.* mkview au BufWinEnter *.* silent loadview

 

Поиск и замена

Поиск осуществляется командами «/» для поиска (по регулярному выражению) вперед, а «?» в обратном направлении. Для продолжения поиска используйте «n», а для прошлого варианта «N». Для поиска слова под курсором используются соответственно «#» и «*».

Для поиска с заменой используйте ^s^TO/m что/gic, где «%» означает работу со всем текстом (а не с текущей строкой), «g» — глобальная замена (а не первое совпадение), «i» — игнорирование регистра, а «c» — подтверждение каждого действия.

 

Автодополнение

Производится по содержимому данного файла, а также указанных в переменной dictionary по нажатию клавиш ‘ ‘.

 

Отмена

«u» для отмены и ‘ ‘ смена регистра.

«~» для выделенного участка (или буквы под курсором). «U» — принудительно установить верхний регистр, а «u», соответственно, нижний.

 

Повторить

«.»

 

Конфигурация

Основным конфигурационным файлом является ~/.vimrc. Активация русского шрифта в GUI-режиме плюс выбор темы для обоих режимов осуществляется, например, следующим кодом:

if has("gui_running")
colorscheme candy
set guifont=-cronyx-courier-medium-r-normal-*-*-120-*-*-m-*-koi8-r endif
if !has("gui_running") colorscheme elflord endif

Перечень наиболее используемых «горячих» клавиш:

Выход по F10:

nmap <F10> :q<CR>
imap <F10> <ESC>:q<CR>

Сохранение по F2:

nmap <F2> :w<CR>
imap <F2> <ESC>:w<CR>i<Right>

Компиляция по F9:

nmap <F9> :make<CR>
imap <F9> <ESC>:make<CR>

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

Print Friendly, PDF & Email