Статья о всемирно известном редакторе VIM. В данной статье, мы научимся правильно выходить из этого редактора, а также познакомимся с основным набором его команд. Многие новички, открыв файл этим редактором, в ужасе и панике не могут сориентироваться где и что находится. У многих пользователей, вызывает затруднение даже такая простая задача как банальный выход из этого редактора. Мы поможем разобраться с этим и другими проблемами, которые возникают у новичков.
Учимся выходить из VIM
На сайте stackoverflow.com вопрос «How to exit the vim editor» набрал уже почти 2 000 000 просмотров, и вопрос с каждым годом всё набирает популярность. Не откладывая вопрос в долгий ящик, расскажу сразу, как выйти из vim:
Нажимаем Esc ->
затем shift+: (двоеточие) ->
q ->
! (восклицательный знак) ->
Enter
Ура, vim закрылся!
Полезные команды VIM
Теперь рассмотрим наши действия более подробно. Начать стоит с того, что в vim есть 3 режима работы:
- Режим команд
- Режим редактирования
- Визуальный режим
Режим команд
В этом режиме нельзя в окне редактора вводить текст, а все кнопки клавиатуры vim воспринимает как команды управления. Некоторые команды отображаются в левом нижнем углу редактора, и их можно редактировать. Выполнение команды - Enter
. Как пример команды можно привести :q
- выход, :wq
- выход с сохранением, :q!
- выход без сохранения. Также есть множество других полезных команд, о которых ниже.
Переход в этот режим всегда осуществляется кнопкой Esc на клавиатуре
Режим редактирования
Для перехода к вводу текста из командного режима (переход в режим редактирования) мы можем сделать клавишей Insert
или просто i
.
При этом в нижнем левом углу у нас появится -- ВСТАВКА --
или -- INSERT --
, в зависимости от настроек языка редактора vim. После этого мы можем писать или править текст.
В этом режиме есть дополнительный режим: если мы еще раз нажмем Insert
, текст в левом нижнем углу изменится на -- ЗАМЕНА --
(или -- REPLACE --
), и набираемый текст будет замещать старый.
Визуальный режим
Для перехода в этот режим нужно нажать Esc
(переходим в режим команд) и v
(или Ctrl+v
), внизу появится сообщение -- ВИЗУАЛЬНЫЙ РЕЖИМ --
(-- VISUAL --
). Этот режим служит для выделения, копирования, вырезания, вставки текста и другими удобными инструментами. Причем v
- посимвольное выделение, V
(Shift+V
) - построчное выделение, Ctrl+Shift+v
- блочное выделение
Рассмотрим более подробно, в чем сила редактора vim и его удобство
В качестве примера вспомним творчество великого поэта Александра Сергеевича Пушкина:
Редактирование
Тут мы видим окно vim, сейчас открыто в командном режиме (указания режимов в левом нижнем углу нет), в правом нижнем углу мы видим текст: 22,21-12 60%
- 22 - текущая строка;
- 21 - текущий байт в строке (т.к. у нас UTF-8 и русские буквы, то каждый символ занимает 2 байта);
- 12 - текущая позиция символа под курсором;
- 60% - какая часть текста отображается в окне. Если мы промотаем текст вверх - у нас будет там надпись "Наверху", если промотаем вниз и дальше проматывать будет некуда - будет отображено "Внизу";
Что мы можем сделать в данный момент с текстом?
- Перейти на конткретную строку
:20
- переход на 20ю строку текста.:1
- переход на первую строку текста.:$
- переход на последнюю строку; - Поиск по regexp:
/regexp
, дальше можно перемещаться по найденным элементам,n
- вперед,N
(Shift+n
) - назад.
На скриншоте видно, что мы искали слово "Там" в начале строки (^
)
- Поиск по шаблону: мы можем подвести курсор к любому слову, и нажать
*
(Shift+8
), будут найдены все аналогичные слова. По ним можно перемещаться с помощьюn
иN
. - Замена текста. Шаблон команды для замены:
:%s/Шаблон поиска/Шаблон замены/Модификаторы
. Например, мы хотим по всему тексту поменять "Там" на "Тут". Команда будет::%s/Там/Тут/
. Результат на картинке:
Модификаторы аналогичны модификаторам команды sed
, например i
- поиск без учета регистра, g
- глобальный поиск по строке (без этого модификатора действия будут завершены на первом найденном совпадении). Также в замене можно указать номера строк, в пределах которых эту замену нужно произвести. :1,10s/Там/Тут
.
Тут мы сделали замену только с 1 по 10 строку в тексте, остальные строки незатронуты. Также вместо одной из строк можно указать .
, в этом случае вместо точки будет подставлена строка, на которой в данный момент находится курсор
- Отмена наших изменений.
u
- отменить последнее действие, можно выполнять несколько раз. - Если сделали лишнюю отмену, есть замечательная команда
:redo
, которая повторит последнее отмененное действие. - Удалить строку:
dd
- будет удалена одна строка под курсором.5dd
- удалить 5 строк от курсора и ниже (и так далее). - Скопировать строку в буфер для дальнейшей вставки
yy
илиY
(Shift+y
). - Вставить строку из буфера:
p
- под курсором,P
(Shift+p
) - над курсором. - Убрать перенос строки между строками:
J
(Shift+j
). Очень полезно, когда в длинной строке нужно убрать перенос и очень не хочется перемещаться курсором к переносу строки.
Навигация
Оригинальный редактор vi в старых версиях также имел одну особенность: перемещение по тексту курсора возможно было только в режиме команд, и осуществлялось клавишами:
h
- влевоj
- внизk
- вверхl
- вправо
Хоть и сейчас можно перемещаться по тексту клавишами курсора, однако для обратной совместимости в vim оставлен и такой режим перемещения по тексту (многим старым пользователям vim так даже привычнее) Также есть удобные быстрые перемещения по тексту (здесь и далее я не уточняю, что строчные и прописные буквы отличаются в командах):
w
- перейти к следующему словуW
- перейти к следующему слову, игнорируя любую пунктуациюe
- перейти к концу следующего словаE
- перейти к концу следующего слова, игнорируя любую пунктуациюb
- к предыдущему словуB
- к предыдущему слову, игнорируя пунктуациюH
- к первой строке экранаL
- к последней строке экранаM
- к середине экрана
Сохранение, выход и отмена
Самое интересное оставим на конец первой части нашей статьи. Кроме написанного в начале статьи способа есть и другие способы выйти из редактора (все выполняются из командного режима):
ZZ
(Shift + z + z
) - записать и выйти;ZQ
(Shift + z + q
) - выйти без сохранения;:w
- сохранить текущий редактируемый файл;:w!
- сохранить во что бы то ни стало (например, когда вы открыли vim без sudo, команда :w! позволит всё равно сохранить файл. Если, конечно, у вас есть права на sudo);:q
- выйти из редактора. Если есть несохраненные изменения, редактор не позволит сделать выход;:q!
- выйти из редактора во что бы то ни стало (все несохраненные изменения будут утеряны);:wq
- сохранить и выйти;:w filename
- сохранить файл под именем filename.
Это далеко не полный список возможностей редактора vim, тут мы не затронули визуальный режим и многие (МНОГИЕ) команды, которые есть в нем. При должном знании команд редактора vim им можно пользоваться практически как полноценным IDE, особенно с учетом того, что в современных версиях редактора есть и подсветка синтаксиса, и автоотступы, и многое другое.
Эта статья полностью, от и до, была написана в редакторе vim версии 2:8.0.1842-1.