Если вы это читаете, то вы скорее всего знаете, что такое 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″]