Если вы это читаете, то вы скорее всего знаете, что такое vim. Это один из самых распространенных текстовых редакторов в *nix-системах. Его функционал может быть расширен при помощи плагинов, что позволяет расширять редактор практически до бесконечности. Эта статья — просто шпаргалка, в которую включены горячие клавиши vim, знание которых заметно ускоряет работу, что делает использование vim более эффективным. Собственно, вот и они:
Горячие клавиши vim
Перемещение по тексту:
h | Влево |
l | Вправо |
j | Вниз |
k | Вверх |
w | Вперед на первую букву слова |
e | Вперед на последнюю букву слова |
b | Назад на первую букву слова |
ge | Назад на последнюю букву слова |
W | То, же, что и w, но словом считается то, что отделено пустыми символами |
E | То, же, что и e, но словом считается то, что отделено пустыми символами |
B | То, же, что и b, но словом считается то, что отделено пустыми символами |
gE | То, же, что и ge, но словом считается то, что отделено пустыми символами |
^ | На первый непустой символ строки |
$, End | На конец строки |
0 (ноль), Home | На начало строки |
( | На первую точку слева от курсора (если она есть, в противном случае на начало абзаца) |
) | На первую точку справа от курсора (если она есть, в противном случае на конец абзаца) |
{ | На абзац назад до пустой строки |
} | На абзац вперед до пустой строки |
gj | На одну экранную строку вниз. Экранная строка — это целая строка длиной меньше ширины экрана, либо часть длинной строки, разделенной на экране на несколько |
gk | На одну экранную строку вверх. |
f# | Поиск вперед в строке символа # и установка курсора на него |
F# | Поиск назад в строке символа # и установка курсора на него |
t# | Поиск вперед в строке символа # и установка курсора после него |
T# | Поиск назад в строке символа # и установка курсора после него |
; | Повтор поиска вперед символа, найденного при помощи f/t/F/T |
, | Повтор поиска назад символа, найденного при помощи f/t/F/T |
% | Перемещение курсора на скобку, парную той, на которой находится курсор. Парные символы можно задать при помощи команды :set matchpairs |
:# | Перемещение курсора на строку # |
#G | Перемещение курсора на строку #, аналогично :# |
gg | Перемещение курсора в начало |
G | Перемещение курсора в конец |
#% | Перемещение курсора на # процентов от начала |
H | Перемещение курсора на начало видимой части текста |
M | Перемещение курсора на середину видимой части текста |
L | Перемещение курсора на конец видимой части текста |
Control+u | На полэкрана вверх |
Control+d | На полэкрана вниз |
Control+y | На одну строку вверх. Курсор при этом не перемещается |
Control+e | На одну строку вниз. Курсор при этом не перемещается |
Control+b | На один экран минус 2 строки вверх |
Control+f | На одну экран минус 2 строки вниз |
zt | Прокрутка текста так, чтобы курсор оказался вверху экрана |
zz | Прокрутка текста так, чтобы курсор оказался в середине экрана |
zb | Прокрутка текста так, чтобы курсор оказался внизу экрана |
В обычном режиме:
<< | Сдвинуть строку влево (табуляция) |
>> | Сдвинуть строку вправо (табуляция) |
Режим выделения:
v | Войти в режим выделения символов |
V | Войти в режим выделения строк |
Control+Shift+v | Войти в режим выделения прямоугольного блока текста |
gv | Выделяет текст, который был выделен предыдущей командой выделения |
o | Перемещение курсора в области блочного выделения для изменения размера влево |
O | Перемещение курсора в области блочного выделения для изменения размера вправо |
I | Включить вставку символов в блочном выделении. После нажатия I набираются символы, а по окончании нажимаете Escape. Все набранные символы будут вставлены в каждую строку |
с | Аналогично I, но перед вставкой символов удаляет всё, что было выделено блоком |
с | Аналогично I, но перед вставкой символов удаляет всё от левого края выделения до конца строки |
u | Изменить регистр выделенных символов на нижний |
U | Изменить регистр выделенных символов на верхний |
~ | Изменить регистр выделенных символов на противоположный |
J | Объединить все строки, находящиеся в области выделения |
r | Заменить все символы на введенный после r, например rx заменит все символы в области выделения на x |
< | Сдвинуть выделенный блок влево (табуляция) |
> | Сдвинуть выделенный блок вправо (табуляция) |
Работа с буфером обмена:
«*yy | Скопировать строку в буфер обмена текущего выделения. Потом можно вставить скопированное в любом приложении нажатием средней кнопки (колесика) мыши |
«+yy | Скопировать строку в буфер обмена. Потом можно вставить скопированное в любом приложении нажатием Ctrl+v |
«ayy | Скопировать строку в регистр a (имена регистров соответствуют буквам латинского алфавита, возможны имена a-z) |
«Ayy | Добавить строку в регистр a |
«ap | Вставить текст из регистра a |
Метки:
mx | Создать метку с именем x |
`x | Переместить курсор на метку x |
‘x | Переместить курсор на строку с меткой x |
:marks | Просмотреть все существующие в данный момент метки |
Ctrl+Shift+o | Перемещение по меткам назад |
Ctrl+Shift+i | Перемещение по меткам вперед |
` ` | Переместить курсор на предыдущую метку |
‘ ‘ | Переместить курсор на предыдущую метку |
Поиск:
/ | Войти в режим ввода выражения для поиска. В vim можно использовать при поиске регулярные выражения, при этом символы «.», «*», «[«, «]», «^», «%», «/», «\», «?», «~», «$» являются специальными и их обязательно надо экранировать обратным слэшем («\») |
? | То же, что и /, но поиск будет производиться в обратном порядке |
n | Повторить поиск вперед |
N | Повторить поиск назад |
* | Поиск слова, на котором стоит курсор, вперед, со строгим соответствием |
# | Поиск слова, на котором стоит курсор, назад, со строгим соответствием |
g* | Поиск слова, на котором стоит курсор, вперед, с нестрогим соответствием, то есть, если курсор на слове win, то будет найдено также слово winter |
g# | Поиск слова, на котором стоит курсор, назад, с нестрогим соответствием |
/выражение\c | Поиск слова без учета регистра, независимо от настроек vim. Переключать учет регистра можно командами «:set ignorecase» и «:set noignorecase» |
/выражение\C | Поиск слова с учетом регистра, независимо от настроек vim |
\< | Обозначение начала слова при поиске. /\ |
\> | Обозначение конца слова при поиске. /\<win\> — найти только win, но не winter |
/выражение/b+1 | Найти выражение и установить курсор на символ +1 от начального, то есть на второй |
/выражение/e-3 | Найти выражение и установить курсор на символ -3 от конечного |
?выражение?b+1 | То же, что и /выражение/b+1, но с поиском в обратную строну |
?выражение?e-3 | То же, что и /выражение/e-3, но с поиском в обратную строну |
стрелка вверх | При вводе строки для поиска просмотр истории поиска выражений, начинающихся с того, что уже набрано |
Автозамена:
При автозамене используется следующая конструкция:
:[область-действия]s/[что-искать]/[на-что-менять]/[модификаторы]
Область действия:
% | Весь текст |
1 | Первая строка |
. | Текущая строка |
$ | Последняя строка |
X,Y | От строки X до строки Y |
.,$ | Вариант предыдущего выражения, от первой до последней строки. Аналогично % |
Модификаторы:
g | Все вхождения в строке |
c | С запросом подтверждения |
i | Без учета регистра |
e | Не выводит ошибку, если искомая строка не найдена |
В строках для поиска и замены можно использовать регулярные выражения, если вы знакомы с программой sed, то проблем у вас не возникнет.
Это не все сочетания клавиш, которые доступны при работе в vim, но даже их уже достаточно для того, чтобы повысить эффективность работы в этом текстовом редакторе.
[wysija_form id=»2″]