Тек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 — на слово влево;

  • } — на параграф вперед (параграф — это блок текста, отделённый пустой строкой);

  • { — на параграф назад;

  • [[ — в начало текста;

  • ]] — в конец текста.

Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.

Другие полезные команды

Команда

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

R, i

Переход в режим ввода текста с заменой — обычный ввод текста

I

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

o

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

O

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

a

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

x

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

X

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

dd

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

d<число>d

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

yy

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

y<число>y

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

p

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

P

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

J

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

u

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

.

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

:

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

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

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

  • :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 <имя файла> — создание нового или открытие существующего файла.

Именованные буферы сохраняют своё содержимое при переходе к редактированию другого файла.

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

Дополнительные команды редактора

Команда

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

G

Переход в конец файла

<номер строки> G

Переход на конкретную строку в файле

<число>

Переход на <число> строк вперед

:set wrap

Перенос длинной строки

:syntax on/off

Включить/выключить подсветку синтаксиса

/<слово>

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

n

Переход к следующему результату поиска

:h

Отображение руководства по редактору

Расширенный редактор 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>