Тек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>