Текcтовые редакторы vi и vim
Редактор vi — универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC и т. д.). Эта универсальность выражается непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь «обычные» кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).
Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но в ограниченном контексте.
Окружение
МСВСфера Сервер версии 8.X/9.X
МСВСфера АРМ версии 8.X/9.X
Редактор vi
Данный редактор установлен в ОС МСВСфера по умолчанию.
Режимы работы
Ввод текста
В этом режиме всё, что набирается на клавиатуре, отображается на экране терминала и запоминается в буфере редактора.
Командный режим
В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание текста, и т. д.), то есть функции редактирования. В данном режиме набираемые команды не отображаются на экране.
Режим командной строки
Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, читать новый файл, выходить из vi, производить настройку редактора, поиск по шаблону, а также выполнять некоторые функции редактирования. Команды отображаются в нижней части экрана (в командной строке редактора).
Ввод текста
Return или Enter — создает пустую строку и переводит курсор в её начало;
Ctrl+H — удаляет последний введённый символ (это действие не отображается на экране до выхода в командный режим);
Ctrl+[ или клавиша Esc — переводит редактор в командный режим.
Командный режим
i
— переход в режим набора текста методом вставки перед текущим символом;a
— переход в режим набора текста методом вставки за текущим символом;R
— переход в режим набора текста методом замены.
Перемещение курсора
h, j, k, l
— на один символ (одну строку), как показано стрелками;^
или0
— в начало текущей строки;$
— в конец текущей строки;w
— на слово вправо;b
— на слово влево;}
— на параграф вперед (параграф — это блок текста, отделённый пустой строкой);{
— на параграф назад;[[
— в начало текста;]]
— в конец текста.
Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.
Команда |
Описание команды |
---|---|
|
Переход в режим ввода текста с заменой — обычный ввод текста |
|
Переход в режим ввода с начала текущей строки |
|
Переход в режим ввода с новой строки под курсором |
|
Переход в режим ввода с новой строки над курсором |
|
Переход в режим ввода после курсора |
|
Стирание символа после курсора |
|
Стирание символа перед курсором |
|
Стирание текущей строки |
|
Стирание |
|
Копирование текущей строки в неименованный буфер |
|
Копирование |
|
Вставка строки из неименованного буфера под курсором |
|
Вставка строки из неименованного буфера над курсором |
|
Слияние текущей строки со следующей |
|
Отмена последней команды |
|
Повтор последней команды |
|
Переход в режим командной строки |
Режим командной строки
Режим командой строки позволяет производить действия с файлом или с отображением файла.
Для вызова того или иного действия в режиме командной строки, необходимо начать команду с символа :
.
Ниже представлен список наиболее полезных команд.
:q
или:q!
— выход из редактора без сохранения изменений;:x
— выход из редактора с записью, если файл был модифицирован;:w
илиw <имя_файла>
илиw! <имя_файла>
— запись файла и возвращение в командный режим;:e <имя_файла>
или:e! <имя_файла>
— загрузка указанного файла;:r <имя_файла>
— добавить содержимое указанного файла к редактируемому сразу за текущей строкой;:set number
— включить нумерацию строк;:set nonumber
— отключить нумерацию строк;:!command
— выполнить команду UNIX, не покидая редактора;:/word
— выполнить поиск словаword
в тексте;:/
— повторить поиск словаword
далее по тексту.
Повторители, буферы и окна редактирования
Повторители
Командам и движениям курсора можно давать повторители (числа), например:
2w
— передвинуть курсор на два слова вперёд;10l
— передвинуть курсор на десять символов вправо;d10l
— стереть десять символов справа от курсора;2d10l
— стереть двадцать символов справа от курсора;5J
— слить пять последующих строк в одну;4.
— повторить последнюю введённую команду четыре раза.
Буферы
Редактор имеет три типа буферов: буфер стирания (0-9), неименованный буфер и именованные буферы (a-z).
В буферы стирания автоматически заносятся стираемые элементы. В буфере 0 хранится последний стёртый элемент, в буфере 1 — предпоследний и т.д.
Вот некоторые команды для операций с буфером:
yy
— занести текущую строку в неименованный буфер;y<движение_курсора>
— занести указанный движением курсора блок текста в неименованный буфер;ayy
— занести текущую строку в именованный буфер «a»;Ayy
— добавить текущую строку к содержимому именованного буфера «a»;by10j
— занести последующие 10 строк в именованный буфер «b».p
— вставить в текущую позицию содержимое неименованного буфера;ap
— вставить в текущую позицию содержимое именованного буфера «a»;1p
— вставить в текущую позицию содержимое буфера стирания «1».
Окна редактирования
Редактировать сразу несколько файлов можно, указав все необходимые файлы в командной строке
при вызове редактора (например: vi <файл_1> <файл_2> <файл_3>
). Примеры команд для перехода к другому файлу:
:n
— переход к следующему файлу в списке;:rew
— возврат к редактированию первого файла в списке.:e <имя файла>
— создание нового или открытие существующего файла.
Именованные буферы сохраняют своё содержимое при переходе к редактированию другого файла.
Дополнительные опции
Команда |
Описание команды |
---|---|
|
Переход в конец файла |
|
Переход на конкретную строку в файле |
|
Переход на |
|
Перенос длинной строки |
|
Включить/выключить подсветку синтаксиса |
|
Поиск в тексте по определённому слову |
|
Переход к следующему результату поиска |
|
Отображение руководства по редактору |
Расширенный редактор vim
Редактор vim расшифоровывается как vi improved. Имеет расширенный функционал по сравнению с редактором vi.
Основные отличия от vi.
Работа с несколькими файлами одновременно. Разбиение окон редактирования может производиться многократно как по горизонтали, так и по вертикали.
Поддержка Unicode.
Поддержка визуального режима, который позволяет, например, выполнять операции над блоками текста.
Неограниченная глубина отмены (undo) и возврата (redo) действий.
Режим сравнения двух файлов, перенос отдельных изменений из одного файла в другой.
Широкая файловая поддержка (файл со справкой и более 200 файлов с описанием синтаксиса).
Подсветка синтаксиса, автоматическое определение величины отступа для каждой строки в зависимости от языка программирования (изначально поддерживает более 200 языков программирования и форматов конфигурационных файлов).
Интеграция с операционной системой, дающая возможности, близкие к интегрированным средам разработки, такие как поиск ошибки по сообщению компилятора, автодополнение идентификаторов и др..
Поддержка языка сценариев; возможность написания модулей расширения — плагинов.
Автоматическое продолжение команд, слов, строк целиком и имён файлов.
Автоматический вызов внешних команд (например, автоматическая распаковка файла перед редактированием).
Распознавание и преобразование файлов различных форматов.
Удобный механизм истории команд, поисковых слов и т. д..
Запись и исполнение макросов.
Возможность сохранения настроек и сеанса.
Возможна интеграция с языками программирования Perl, Tcl, Python и Ruby.
Поддержка языков с письмом справа налево (арабских и других).
Сворачивание (folding) текста для лучшего обзора.
Возможность использования графического интерфейса в специальных версиях (GTK, Motif, и др.).
Хорошо конфигурируется и настраивается под нужды пользователя.
Для программистов: поддержка цикла разработки «редактирование — компиляция — исправление» программ. Автоматическое выполнение сборки/компиляции, обнаружение и распознавание ошибок, переход к строкам ошибок в тексте программы.
Данный редактор также установлен по умолчанию.
Режимы работы редактора vim
В 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
.
Основные возможности
Переходы
Для перехода на строку с номером n
воспользуйтесь командой G
.
Так, для перехода к началу текста наберите 0G
, для сотой строки — 100G
, а для конца документа — $G
.
Для перехода на n
символов в нужную вам сторону вы можете использовать клавиши со стрелками.
То есть для перехода на 1000 символов вниз наберите 1000
и нажмите стрелку вниз.
Для перемещения по тексту используйте следующие команды:
(
,)
;для перемещения по предложениям —
{
,}
;для параграфов —
[[
,]]
;для функций:
%
— переход к парной скобке,CTRL+O
,CTRL+I
— переход назад и вперед соответственно по истории переходов.
Метки
Используются для отметки позиции ^<метка>
, где <метка>
— любая буква для быстрого к ней перехода.
Метки нижнего регистра действительны в пределах данного файла, метки верхнего регистра действуют во всех открытых файлах.
Список всех меток можно получить командой marks
.
Для того, чтобы установить метку на текущей строке используйте клавиши М и Х. Для того, чтобы перейти на метку X введите команду: ' X
.
Фолды
Предназначены для скрытия ненужных в данный момент данных, чтобы те не отвлекали внимания. Например, кода подпрограммы, с которой вы в данный момент не работаете. По умолчанию фолды активированы в режиме ручной расстановки. Если вы хотите их автоактивации по отношению к табуляции, то добавьте в конфигурационный файл следующую строку:
set foldmethod=indent
Все команды для работы с фолдами начинаются с z
. Открытие фолда производится, например, по zo
(или стрелке вправо), закрытие кода в фолд — по zc
.
Сессии
При ведении группы проектов нередко требуется сохранить текущее состояние и настройки редактора,
чтобы затем продолжить работу с того же места.
Для этого и предназначены сессии, которые создаются командой :mksession /path/to/Session.vim
, а читаются командой :so /path/to/Session.vim
.
Гораздо чаще возникает необходимость сохранить не всю сессию, а только текущий контекст
(сюда входит, например, положение курсора в коде, текущая расстановка фолдов и многоe другое).
Это действие выполняет команда :mkview
, чтение — :loadview
.
Очень удобно сделать сохранение и чтение контекста автоматическим при начале и окончании редактирования файла.
В vim команда au
используется для создания автоматических команд.
Это может быть реализовано следующим кодом (применяется для всех файлов, имеющих точку в имени).
Нажмите клавишу :
и введите следующие команды по одной (нажимая Enter после каждой):
au BufWinLeave *.* mkview
au BufWinEnter *.* silent loadview
Поиск
Поиск осуществляется командой /
для поиска (по регулярному выражению) вперед и ?
в обратном направлении.
Для продолжения поиска используйте n
, а для прошлого варианта N
. Для поиска слова под курсором используются соответственно #
и *
.
Автодополнение
Производится по содержимому данного файла, а также указанных в переменной 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>