Vim — один из наиболее функциональных текстовых редакторов для интерфейса командной строки. Построенный на основе “vi”, редактора 1976 года, vim мощнее и обладает дополнительными возможностями, сохраняя подход своего предшественника к работе с текстами.
Установка
Редактор есть практически в любом стандартном репозитории каждого дистрибутива Linux. Воспользуйтесь своим установщиком пакетов (например, yum для CentOS):
sudo yum install vim
После этого vim должен корректно установиться.
Запуск Vim
Если не указывать никаких агрументов открывается пустой файл. В зависимости от вашего дистрибутива могут присутствовать представление и информация о лицензии.
Когда вы начнете пользоваться редактором, они пропадут. Чтобы открыть файл, укажите его имя. Например, далее мы создадим файл “newfile” и откроем его в vim.
Создание файла:
echo "Это новый файл. Вот вторая строчка, А это третья. Здесь ещё немного текста. Мы будем работать с этим файлом. Это будет очень здорово." >> newfile
Открытие файла при помощи vim:
vim newfile
Режимы работы
Основное отличие vim от многих других редакторов заключается в том, что в нем несколько режимов редактирования, а не один, как в большей части других. В других программах особые функции, например, копирование текста, приводится в действие комбинациями клавиш. В vim для разделения этих функций и набора текста используются разные режимы.
Нормальный режим
Режим по умолчанию, в котором vim находится после запуска. Применяется для быстрой навигации по документу и редактирования: в нем можно копировать, вставлять, перемещать, удалять и изменять текст. Переход из других режимов осуществляется нажатием клавиши «escape». Для набора текста не используется.
Режим вставки
Для набора текста нужно перейти в режим “вставки”. Он похож на интерфейс набора текста многих других программ. Вводимый вами текст появляется на экране в документе, каждая клавиша соответствует своему символу. Перейти в этот режим можно следующим образом:
i — в текущем положении курсора
a — на следующем символе после текущего положения
I — в начале текущей строки
A — в конце текущей строки
Режим визуального выделения
Позволяет визуально выделять текстовые фрагменты. Затем к ним можно применять команды нормального режима для редактирования или форматирования.
v — режим обычного (посимвольного) визуального выделения перемещением курсора вверх, вниз, влево или вправо
V — режим построчного визуального выделения. Строки выделяются целиком перемещением вверх или вниз
[ctrl]-v — режим блочного визуального выделения. Выделяется прямоугольный участок, который можно увеличивать и уменьшать. Позволяет выбирать фрагменты нескольких линий.
Перемещение
Вы всегда можете передвигаться по документу стрелками, но vim предоставляет более быстрый и удобный способ. В нормальном режиме для навигации применяются следующие клавиши:
h — перемещение влево
j — перемещение вниз
k — перемещение вверх
l — перемещение вправо
Сначала эти клавиши могут показаться непонятными и неинтуитивными, но они были выбраны потому, что находятся в среднем ряду на стандартной клавиатуре. Это значит, что рука пользователя проходит от положения покоя значительно меньшее расстояние, чем при использовании стрелок.
Также есть дополнительные функции навигации, вот несколько наиболее важных:
gg — переход в начало документа
G — переход в конец документа. Если предварительно ввести номер — переместиться на строку с этими номером
w — перемещение к следующему слову. Если предварительно ввести количество — переместиться на это количество слов
b — перемещение к предыдущему слову. Если предварительно вввести количество — переместиться на это количество слов назад
e — перемещение к концу слова. Если предварительно указать количество — переместиться на указанное количество слов
0 — перемещение к началу строки
$ — перемещение к концу строки
Поиск текста
Что бы найти фрагмент текста, нужно перед текстом поиска ввести слэш «/» и нажать enter
/это По умолчанию поиск в vim регистрозависимый, для того что бы сделать поиск независимый от регистра, нужно перед текстом ввести следующую комбинацию "/\c" /\cэто
Если же наоборот нужно сделать явное задание регистрозависимого поиска используйте комбинацию «/\C»
/\СЭто будет
Что бы найти следующий фрагмент нажмите «n» предыдущий «N»
Редактирование
Редактирование выполняется посредством команд в нормальном режиме. Они очень эффективны в комбинации с командами перемещения. Любая команда из раздела перемещения может задать направление. Например, можно удалить или скопировать одно слово, указав “w” за соответствующей командой.
Рассмотрим наиболее употребимые действия.
Удаление текста
x — удалить символ на позиции курсора
d — удалить в заданном командой перемещения направлении. Например, “dl” удаляет один символ справа
dd — удалить строку
D — удалить все символы от положения курсора до окончания строки
Замена текста
r — заменить символ на позиции курсора заданным после команды символом
c — заменить в заданном командой перемещения направлении. Например, “cb” заменяет предыдущее слово. Для набора текста на замену запускается режим вставки.
C — заменить до окончания строки. Текст на замену набирается в режиме вставки.
Копирование и вставка
y — копировать в заданном далее направлении
yy — копировать всю строку
Y — копировать до окончания строки
p — вставить последнюю скопированную (или удаленную!) строку ниже текущей
P — вставить последнюю скопированную (или удаленную!) строку выше текущей
Дополнительные команды редактирования
u — отменить последнее действие
<ctrl>-r — вернуть последнее отмененное действие
J — присоединить строку ниже к текущей
Командный режим
Используется для продвинутого редактирования, изменения параметров и управления. В нем выполняется сохранение, выход из программы, продвинутый поиск и многое другое. Активируется клавишей двоеточия “:”.
Команды управления
Команды управления задаются вводом “:” перед каждой командой.
:q — выход из программы. Действие не будет выполнена, если не сохранить изменения
:q! — выход из программы с отменой всех изменений, которые не были сохранены
:w — сохранить изменения. При первичном сохранении или сохранении в другой файл укажите имя через пробел
:e — редактировать указанный далее файл
:bn — редактировать следующий файл (если открыто несколько файлов)
:bp — редактировать предыдущий файл (если открыто несколько файлов)
:qw – сохранить файл и выйти
Объединение команд
Как упоминалось выше, эффективность vim обусловлена возможностью строить цепочки разных действий. Лучше всего этот принцип иллюстрируется, если представлять команды vim в виде языка. Клавиши в нормальном режиме играют роль различных частей речи.
Например, для копирования 5 слов представьте эту фразу как команды, которые понимает vim. Это будет выглядеть так:
:y5w (y — копировать, 5 — количество, w — слов)
Удалить текст от текущей позиции до окончания файла:
:dG (d — удалить, G — переход в конец файла)
Также полезно усвоить ряд используемых в действиях vim принципов. Например, сдвоенный символ обычно распространяет действие команды на всю строку. Следующая команда скопирует не один символ, а строку целиком:
:yy
С другой стороны, соответствующая команде заглавная буква часто действует от положения курсора до окончания линии. В случае с изменением текста это будет следующая команда:
:C
Чтобы выполнить операцию с несколькими символами или строками, укажите перед командой число. Например, такая команда заменит весь текст от текущего положения курсора до окончания следующей строки:
:2C
Заключение
Vim — очень мощный инструмент, но рассмотрение многих его функциональных возможностей выходит за пределы этой статьи. Если вы хотите узнать больше, полезно начать со встроенного в vim обучающего интерфейса:
vimtutor
В нем не рассматриваются тонкости, но он позволит вам разобраться в работе vim и освоить основы редактирования.