Перемещение в Vim
Я иду по файлу длиной в двадцать тысяч строк и ни разу не сбился с пути, потому что не помню дороги наизусть: я помню команды. Перемещение в Vim — это не «курсор бегает по экрану», это навигация по памяти, где у каждой позиции есть имя, смещение и расстояние. Мышь измеряет расстояние в пикселях, мы — в словах, строках и абзацах, то есть в самих единицах, из которых текст состоит. Модные редакторы с гордостью рисуют мини-карту в боковой панели, чтобы ты знал, где ты. Vim предлагает не знать, где ты, а знать, куда идти.
Основные команды перемещения
Стрелки
Хотя использование стрелок в Vim не рекомендуется для опытных пользователей, они всё же доступны:
h— влевоj— внизk— вверхl— вправо
Четыре клавиши, которые тянут руку к гибели: за ними — мышь, а за мышью — привычка щуриться на пиксели. Держись подальше, пока не поздно.
В режиме вставки доступно перемещение по тексту
C-h,j,k,l— переместиться влево, вниз, вверх, вправо.C-w- удалит слово перед курсоромC-u- удалит всё до курсора
Перемещение по словам
Слово — это атомарная единица смысла, и команды w, e, b режут текст ровно по этим атомам, как хороший дизассемблер режет поток по границам инструкций. Никакого «дальше на один символ, ещё раз, ещё» — прыжок туда, где начинается или кончается мысль.
w— переместиться к началу следующего слова.e— переместиться к концу текущего слова.ge- переместиться к концу предыдущего слова.b— переместиться к началу предыдущего слова.
Видео «word-motions» не найдено (урок не готов или slug неверный).
Перемещение по строкам
Строка — это уже не символы, а предложение, у которого есть начало, серая зона отступов и конец. Три клавиши на три границы, и больше ничего не нужно.
0— переместиться в начало текущей строки.^— переместиться к первому непробельному символу строки.$— переместиться в конец текущей строки.
Видео «move-down» не найдено (урок не готов или slug неверный).
Перемещение по тексту
А теперь — целиком: весь файл как одна кусковая память, от первого байта до последнего, с параграфами вместо страниц.
gg— переместиться в начало файла.G— переместиться в конец файла.{— переместиться к началу текущего параграфа.}— переместиться к началу следующего параграфа.
Продвинутые команды перемещения
Комбинированные команды
Здесь включается настоящий хардкор: число перед командой превращает жест в цикл. Одно нажатие — пять строк вниз, и пальцы уже не считают, а считает за них машина.
5j— переместиться вниз на 5 строк.3w— переместиться вперед на 3 слова.2b— переместиться назад на 2 слова.
Поиск
Поиск — это запрос к индексу, а не листание глазами. Шаблон, направление, и весь файл сжимается до одного совпадения.
/pattern— поиск текста по шаблонуpatternвперед по файлу.?pattern— поиск текста по шаблонуpatternназад по файлу.n— перейти к следующему вхождению найденного шаблона.N— перейти к предыдущему вхождению найденного шаблона.
Метки и переходы
Метка — это адрес в адресном пространстве файла: поставил a, и позиция стала известна всем последующим командам. Возврат — как ret в стеке, назад ровно туда, откуда ушёл.
ma— установить меткуaна текущей позиции курсора.'a— перейти к меткеa.''— вернуться к предыдущей позиции курсора.
Перемещение по словам и символам
Точечный поиск внутри строки: не «где-нибудь», а «ровно сюда, на два символа левее». Дешевле любого виджета и работает даже там, где экран едва вмещает строку.
f<char>— переместиться к следующему вхождению символа<char>в строке.t<char>— переместиться к символу перед следующим вхождением<char>в строке.F<char>— переместиться к предыдущему вхождению символа<char>в строке.T<char>— переместиться к символу после предыдущего вхождения<char>в строке.;повторить последнюю команду f или F;,повторяет поиск, но, в отличие от «;», в обратном порядке.
Перемещение по скобкам
Одна клавиша — и курсор перепрыгивает на парную скобку. Для языков со стеком вызовов это как проследить возврат адреса по регистрам, только быстрее.
%— переместиться к соответствующей открывающей или закрывающей скобке ((), {}, []).
Дополнительно
В Lazyvim используется плагин flash.nvim, который позволяет быстро передвигаться по коду, используя s<char>

Flash работает только с видимой частью буфера.
Для прокрутки можно использовать
<ctrl><d>- вниз<ctrl><u>- вверх<ctrl>f- вперед (для данных команд можно указать, насколько вперёд,<ctrl>5f- на 5 страниц вперёд)<ctrl>b- назад
Если нажать клавишу z в режиме Normal:

Клавиши относительного курсора, которые я использую исключительно для прокрутки, - это zt, zb и zz. Они перемещают строку, на которой находится курсор, в верхнюю, нижнюю или среднюю часть экрана соответственно. При перемещении в верхнюю или нижнюю часть экрана над или под курсором остается несколько строк контекста.
Существуют и другие команды, которые также перемещают курсор в первый столбец окна, но вместо того, чтобы запоминать эти сочетания клавиш, я рекомендую сочетать предыдущие команды с 0, как в zt0, zb0 и zz0. Команда 0 просто означает «Перейти к началу строки». Вы также можете использовать home, если на вашей клавиатуре есть клавиша home, но 0 легче нажимать на многих клавиатурах.
Заключение
Никто не рождается с этими командами в пальцах: сначала они чужие, потом тяжёлые, потом — свои, как тропа, по которой ходишь в темноте и не спотыкаешься. Владение перемещением — это и есть вся разница между тем, кто ищет текст глазами, и тем, кто до него доходит. Дорога становится своей, когда перестаёшь её замечать, — а курсор стоит ровно там, где ты его оставил.
Полезные ресурсы
- Vim Tutor — интерактивное руководство по Vim.
- Vimcasts — видеоуроки по использованию Vim.
- Vim документация — официальная документация Vim.
Несколько дней практики — и пальцы будут знать дорогу лучше, чем ты сам.