2.8.3.1 Полноэкранный редактор VI и улучшенный редактор VIM
Скачать документ Режимы работы редактора
Ввод текста
Команды
Перемещение курсора
Редактирование
Командная строка
Блоки, буферы, окна редактирования. Повторители
Открыть/создать файл
Дополнительные опции
Улучшенный редактор VIM
Редактор vi - универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.). Эта универсальность выражается непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь «обычные» кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).
Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но в ограниченном контексте.
Вы можете подробнее ознакомиться с информацией по работе с редактором vim, просмотрев наши обучающие видео:
на RuTube — Текстовый редактор vim;
в Яндекс.Дзен — Текстовый редактор vim;
в VK Видео — Текстовый редактор vim.
На наших каналах вы также сможете найти много другой полезной информации.
Режимы работы редактора
Ввод текста
В этом режиме все, что набирается на клавиатуре, отображается на экране терминала и запоминается в буфере редактора.
В данном режиме нет возможности осуществлять операции редактирования текста, за исключением стирания последнего набранного символа (с помощью комбинации клавиш «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>
Дата последнего изменения: 05.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.