30
июня
5

Клавиши и комбинации клавиш VIM



VIM — Vi IMproved (Улучшенный Vi). Это очень мощный и гибкий редактор, который открывает большое поле для эффективной и продуктивной деятельности.
Чем большего мастерства вы достигли в работе с редактором VIM, тем больше времени вы будете проводить в его основном режиме, где доступно множество команд. И дабы свести к минимуму работу с текстом и сохранить себе время, которое можно провести с большей пользой, нужно сначала потратить некоторое время для освоения редактора, которое потом многократно окупится.

Существует несколько режимов работы с VIM, которые могут в начале пути изучения ввести в замешательство и навести на мысль бросить это гиблое дело, возвращаясь к какому-то редактору попроще, что не решит проблему трудоемкости. Но со временем чувство прекрасного и желание работать более эффективно с текстовыми файлами обязательно победит. Поэтому почему бы сразу не начать постепенно адаптироваться в среде VIM. Любое дело можно освоить, если заниматься им регулярно.

Самыми используемыми являются: режим команд (он же — основной или нормальный), вставки, замены и визуальный режим. В командном режиме можно извращаться с имеющимся текстом, как заблагорассудится с помощью команд или горячих клавиш; в режиме вставки клавиши ведут себя, как в обычном редакторе (самый нудный режим); режим замены говорит сам за себя; в визуальном режиме доступна работа с блоками текста.Для перехода в режим вставки можно нажать клавишу Ins один раз, если дважды — режим замены, чтобы перейти в основной режим следует нажать клавишу Esc.

В этой статье будут описаны клавиши и комбинации клавиш, которые позволят Вам чувствовать себя комфортно при работе с редактором Vim (настройки также можно задавать в файле vimrc).Есть такая особенность в Vim, что все действия возможны над текстом от одного до N раз. Команды имеют следующий универсальный формат:
[количество_раз] <действие><объект>
[количество_раз] задавать не обязательно, по умолчанию один раз.

Действия можно производить над объектом, который также можно указывать вместе с числом. Например, команда:
3d2w — три раза удалить два слова.
Изменения, которые были произведены последней командой, можно повторить с помощью клавиши «.».
3x — удалит 3 символа в право, а если после этого нажать точку, то удаляться следующие три символа.

Клавиши перемещения:

h, j, k, l — соответствуют стрелкам влево, вниз, вверх и вправо;
gj/gk — перемещают по экранным строкам, а не реальным;
0 («ноль») — в начало текущей строки;
^ — к первому не пробельному символу в строке;
$ — в конец текущей строки;
e — последний символ следующего слова;
w — на слово вправо, первый символ следующего слова;
b — на слово влево;
W — до пробела вправо;
B — до пробела влево;
( — передвинуть курсор назад на предложение (до точки);
) — передвинуть курсор вперед на одно предложение;
} — абзац вниз (до пустой строки);
{ — абзац вверх;
gg или Ctrl+Home — перейти на первый непробельный символ первой строки файла;
G — перейти на первый непробельный символ последней строки файла;
Ctrl+End — перейти на последний символ последней строки файла;
<number>G или <number>gg — перейти на конкретную строку <number> ;
f<simvol>
— передвинуться вперед (forward) к символу <simvol> в текущей строке;
F<simvol> — назад (backward) к символу <simvol> в текущей строке;
; — для того что бы повторить последнюю команду f или F;
, — повторяет поиск, но в отличии от «;», в обратном порядке;
t<simvol>/T<simvol> — то же что и описано выше, но при этом курсор устанавливается прямо перед символом, а не на сам символ;
H — передвинуть курсор наверх экрана;
M — передвинуть курсор в центр экрана;
L — передвинуть курсор вниз экрана;
<number>% — передвинуть курсор в соответствующее место документа;
Ctrl+d или Ctrl+f — на страницу вперёд;
Ctrl+u или Ctrl+b — на страницу назад;
% — когда под курсором находиться скобка, то нажатие на % переместит курсор на соответствующую парную скобку(),] или }), при повторном нажатии вернется обратно;
[{ — позволяет переместиться назад по тексту к символу скобки, которая является отрывающей текущий блок кода;
]{ — вперед к закрывающей скобке текущий блок кода;

Примеры:
3G — перейти на строку под номером 3;
ft — передвинуть курсор на ближайший символ «f» в строке, потом нажав «;» — перейти на следующий символ «f», если он еще встречается в строке;
gd — перейти к объявлению функции или переменной, которая находиться под курсором;
gD — перемещает к определению глобальной переменной;

Клавиши поиска:

/<pattern> — перейти к <pattern>;
/ — повторить поиск;
?<text> — то же самое, но искать назад;
n — повторить поиск;
p — перейти к предыдущему найденному элементу;
N — повторить поиск назад;
* — перейти к следующему вхождению слова под курсором;
# — перейти к предыдущему вхождению слова под курсором;
[I — найдет и покажет количество вхождений слова (функции) под курсором;

Примечание: в строке поиска можно писать обычное регулярное выражение и для обозначения начала/конца слова применять \< и \> ;

Клавиши удаления:

x — удалить символ под курсором;
X — удалить символ влево (удалить символ перед курсором);
d<символ(ы)_перемещения> — удаляет с символа под курсором до положения после ввода команды перемещения;
dd — удалить текущую строку;
d<число_строк>d — стирание числа строк начиная с текущей;
d+ — удаляет текущую строку и следующую за ней;
d/<pattern> — удаляет текст начиная с текущего положения курсора до первого встретившегося «pattern», не включая его;
daw — удаляет слово, даже когда курсор находится в середине этого слова;
D — вырежет текст от позиции курсора и до конца текущей строки (аналог d$);
Весь удаляемый текст переносится в буфер обмена, откуда позже может быть вставлен.

Примеры:
d^ — удаляет символы с текущего до начала строки;
ciw — удаляет слово под курсором и переходит в режим вставки;
4x — удаляет 4 символы вперед начиная с символа под курсором;

Клавиши удаления с переходом в режим вставки:

s — вырезать текущий символ и оставить редактор в режиме вставки (аналогична xi);
S — вырезать текущую строку и оставить редактор в режиме вставки (аналогична cc);
с — команда аналогичная d, но после удаление переходит в режим ввода;
C — вырезать текст от курсора до конца строки и оставить редактор в режиме вставки;
cc — вырежет текущую строку и оставит редактор в режиме вставки;
r — заменить один символ под курсором;
R — перейти в режим ввода с забиванием текста (режим замены);

Клавиши копирования и вставки:

yy — копирование текущей строки в неименованный буфер;
y<число>y — копирование числа строк начиная с текущей в неименованный буфер;
Y — скопировать весь текст, подобно yy (аналог y$);
p — вставка содержимого неименованного буфера под курсором;
P — вставка содержимого неименованного буфера перед курсором;
]p — подобно p, но автоматически подбирает отступ для вставки кода;

Клавиши отмены:

u — отмена последней команды;
U — отмена изменений во всей строке;
Ctrl+r — отмена отмены;

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

i — перейти в режим ввода с текущей позиции;
I — переместиться в начало строки и перейти в режим ввода;
a — вставить текст справа от текущего символа;
A — вставить текст в конец текущей строки;
o — перейти в режим ввода с новой строки под курсором;
O — перейти в режим ввода с новой строки над курсором;

Другие не менее полезные действия:

. — повтор последней команды;
J — слияние текущей строки со следующей;
`. — перейти к строке, которая редактировалась последней;
` дважды — переход между двумя последними позициями курсора;
‘ дважды — переход между двумя строками, где находились позиции курсора;
Ctrl+n/Ctrl+p — авто-дополнение ключевого слова в режиме вставки;
Ctrl+e — возврат до состояния перед нажатием Ctrl+n/Ctrl+p;
>> — сдвинуть вправо строку (в визуальном режиме — весь выделенный текст;
<< — тоже самое, что и >>, но сдвиг происходит влево;
K — посмотреть man-страницу слова под курсором;
gf — открыть файл с именем, находящимся под курсором;
Ctrl+a — перемещает курсор на ближайшее число и увеличивает его на единицу;
Ctrl+x — перемещает курсор на ближайшее число и уменьшает его на единицу;
~ — меняет регистр букв на противоположный по мере прохождения курсора;
g~~/guu/gUU — меняет регистр на противоположный/нижний/верхний во всей строке;

Применение меток:

`. — если после редактирования текста, к примеру, был выполнен поиск, то с нового места нахождения курсора можно вернуться на позицию последнего изменения;
Также в тексте можно расставлять свои метки — позиции, куда можно в любой момент вернуться. Именем метки может быть любая (одна) буква. На примере метки с именем «a» посмотрим как это работает:
ma — создает метку;
`a — перемещает курсор на метку «a» (конкретное место);
‘a — перемещает курсор на начало строки, содержащей метку «a»;
Ctrl+o/Ctrl+i — перемещение к ранее посещенным меткам назад и вперед;
:marks
— показать все определенные метки;

Примечание: VIM запоминает файл и позицию, в которой находился курсор перед его закрытием, то есть если нажать «’0», то откроется запомненный файл. Такие запоминания делаются в «’0 … ‘9».

Работа в визуальном режиме:

Можно выделить некоторую часть текста, а потом совершить с ней определенные действия.
Для перехода в визуальный режим можно использовать:
v — можно выделять обычными клавишами перемещения, описанными выше;
V — выделяет текст построчно;
Ctrl-v — для выделения прямоугольного участка текста. Удобно применять при редактирования блоков кода программы;
o/O — перемещают курсор в разные концы выделенного блока для изменения размеров ;
gv — выделяет текст, который был выделен прошлой командой выделения;
is — добавить предложение без завершающего пробела;
as — добавить предложение с завершающим пробелом;
!<command> — отфильтровать выделенные строки с помощью внешней программы;
Выделенный текст можно удалять, копировать, вырезать, вставлять теми же клавишами d,y,c,p. Кстати, как и при обычном удалении, текст помещается в буфер обмена.

Работа с файлами:

gf (go file) — перейти к редактированию файла (под курсором должен быть путь);
ZZ — записать файл и выйти (если файл не изменяли, то записываться он не будет);
ZQ — выйти без сохранения;
Ctrl+g — показать информацию о файле;

Работа с окнами:

Ctrl+w — это управляющая комбинация клавиш, а после нее уже идет нужное действие;
Ctrl+w h — перейти в окно слева от текущего;
Ctrl+w j — перейти в окно снизу от текущего;
Ctrl+w k — перейти в окно сверху от текущего;
Ctrl+w l — перейти в окно справа от текущего;
Ctrl+w o — развернуть текущее окно;
Ctrl+w c — закрыть;
Ctrl+w s — разделить окно по горизонтали;
Ctrl+w v — то же самое, только по вертикали;
Ctrl+w f — разделить и в новом окне открыть файл, путь к которому находится под курсором;
Ctrl+w + — увеличение размера окна по горизонтали;
Ctrl+w — — уменьшение размера окна по горизонтали;
Ctrl+w > — увеличение размера окна по вертикали;
Ctrl+w < — уменьшение размера окна по вертикали;
Также, как и раньше, остаются в силе задание кол-ва действий указанием числа.

В режиме вставки также действуют некоторые комбинации клавиш для упрощения работы:

Ctrl+h — удаляет последний символ;
Ctrl+w — удаляет слово перед курсором;
Ctrl+u — удаляет все символы от начала строки до курсора;
Ctrl+t — вставить табуляцию в начало текущей строки;
Ctrl+d — удалить табуляцию из начала текущей строки;
Ctrl+o <command> — выполняет команду command и возвращается обратно в режим вставки;

Полезным для новичков в VIM будет запустить команду в консоли vimtutor ru — это небольшой учебник на русском, который познакомит Вас с основами работы в этом редакторе.

Понравилась статья?
Подписаться на RSS feed
5 комментариев:
  1. Аноним 8 августа, 2011

    где клавиша : сохранить изменения после вставки HTML КОДА?

  2. admin 8 августа, 2011

    В зависимости от текущего режима редактора будет получен разный результат. Если это командный режим (также известен, как основной или нормальный), в который можно перейти по нажатию на клавишу «Esc», то нажатие «:» приведет к вводу в командной строке редактора.
    Для сохранения текущего состояния файла используется команда «:w» или «:write», о чем было описано в статье VIM – редактирование файлов, основы работы.

  3. alexander 23 декабря, 2011

    Спасибо, очень полезный материал. Я больше 20 лет пользуюсь vi, но узнал из ваших статей несколько полезных мелочей 🙂
    Поэтому хочу обратить ваше внимание на замеченную неточность.
    Команда gg работает так же, как G, она также переводит курсор к строке , а не к странице. Эти две команды перехода отличаются только позициями по умолчанию.

  4. Nemo 26 декабря, 2011

    Спасибо, alexander! Исправил.

  5. Игорь 28 января, 2012

    Отличный подбор команд для vim, спасибо!
    Хочу дополнить его парой, которые лично мне очень помогают при редактировании кода:

    1) для того, чтобы заменить что-то, что находится между одинарных кавычек (префиксов ‘) нужно разместить в нормальном режиме курсор перед текстом в кавычках, который требуется заменить либо прямо на нем и нажать ci’, после чего vim вырежет весь текст внутри кавычек и перейдет в режим вставки (insert) с курсором внутри кавычек.
    Также можно заменять текст внутри двойных кавычек командой ci» , текст внутри скобок, квадратных скобок и фигурных скобок соответственно командами ci( , ci[ и ci{

    2) чтобы перевести символ в противоположный регистр нужно в нормальном режиме навести на него курсор и нажать на тильду ~ , а чтобы все слово перевести в противоположный регистр нужно подвести курсор на первую букву слова и нажать g~w, а весь абзац g~} , правда работает у меня только с английскими символами, с русскими не работает.

Оставить комментарий