Перевод статьи «3 Vim commands for blazingly fast navigation between brackets».
В файлах программ обычно множество скобок. Поэтому эффективная навигации между ними имеет большое значение для продуктивности работы программиста. В этой статье я познакомлю вас с тремя командами, которые позволят вам молниеносно перемещаться между скобками.
1. %
Начнем с примера. Стрелка показывает на позицию курсора.
( example )
↑
Нажимаем %:
( example )
↑
Нажимаем % еще раз:
( example )
↑
Это демонстрирует, что при помощи % можно прыгать между парными скобками. Но на самом деле % способен на большее. С его помощью можно находить следующий элемент в строке под курсором или за ним и перемещаться к его паре.
% работает не только с круглыми скобками. Этот символ подходит для перемещений между:
Парами круглых, квадратных и фигурных скобок (это можно менять при помощи опции «matchpairs»).Последовательностями символов, обозначающими комментарии в стиле С: /* */HTML-тегами: <div></div>
Обратите внимание на слова «под курсором или за ним». То есть символ % можно использовать не только тогда, когда курсор стоит непосредственно на скобке.
Пример:
some text (( example )) some text
↑
Скажем, вы хотите переместиться к последней закрывающей скобке. Вы можете подумать, что стоит использовать f(%.
Нажимаем f(:
some text (( example )) some text
↑
Нажимаем %:
some text (( example )) some text
↑
На самом деле использовать f( не обязательно. Того же эффекта можно достичь при помощи просто %.
Дело в том, что под капотом % работает следующим образом:
Находит первую скобку из пары, находящуюся под курсором или за ним, т. е. (.Прыгает к ее парной скобке — ).
Возможно, использование %, когда скобка не под курсором, не слишком интуитивно. Тем не менее, привыкнув, вы сможете перемещаться просто волшебным образом!
2. [( и [{
[( — прыжок назад, к первой круглой скобке, не имеющей пары (()[{ — прыжок назад, к первой фигурной скобке, не имеющей пары ({)
Пример:
{
example
text
↑
}
Нажимаем [{:
{
↑
example
text
}
Помимо [( и [{ у нас есть еще ]) и ]}:
]) — прыжок вперед, к первой круглой скобке, не имеющей пары ())]} — прыжок вперед, к первой фигурной скобке, не имеющей пары (})
Рассмотрим практический пример. Представьте, что вам нужно перемещаться внутри большой функции:
function example() {
const sum = 0;
↑
for (let i = 0; i < 10; i++) {
sum += i;
}
// Какие-то еще действия, занимающие много строк кода
// …
return sum;
}
Скажем, вы хотите переместиться к закрывающей фигурной скобке этой функции. Это можно сделать несколькими способами:
Использовать относительный прыжок, например, 12j, чтобы прыгнуть прямо к }. Этот подход работает для меньших функций. Но в этом примере он бесполезен, так как функция слишком большая и последняя ее строка за пределами видимости экрана.Использовать /} для поиска }. Это могло бы сработать, если бы внутри функции не было других }. Но у нас есть другие }, поэтому, чтобы добраться до последней, вам придется многократно нажимать n.Использовать ]}. Это самый эффективный метод. Он переместит вас прямо к закрывающей фигурной скобке, завершающей функцию. При этом вам не придется считать строки или повторять поиск.
3. ][ и []
][ — прыжок вперед, к следующей } в первом столбце[] — прыжок назад, к следующей } в первом столбце
Пример:
{
↑ example
}
{
{
example
}
}
{
example
}
Нажимаем ][:
{
example
}
↑
{
{
example
}
}
{
example
}
Нажимаем ][ еще раз:
{
example
}
{
{
example
}
}
↑
{
example
}
И еще раз:
{
example
}
{
{
example
}
}
{
example
}
↑
Такой способ перемещения полезен, когда файлы состоят из нескольких функций. В большинстве языков концом функции является } в начале строки (первый столбец). При помощи ][ можно прыгнуть к концу следующей функции, а при помощи [] — к концу предыдущей.
Также есть:
]] — прыжок вперед, к следующей { в первом столбце[[ — прыжок назад, к следующей { в первом столбце
На практике символ { не так часто появляется в первом столбце. Лично мне редко выпадает случай воспользоваться этими командами, но они есть. Если вы знаете сценарии, где ]] и [[ могут быть полезны, поделитесь в комментариях!
Заключение
В заключение хочу сказать, что овладение командами %, [(, [{, ][ и [] может очень ускорить перемещение по файлам программ. Каждая из команд предлагает уникальный функционал, подходящий для определенных ситуаций, а вместе они обеспечивают легкое и быстрое перемещение по коду.
Запись Как перемещаться между скобками в Vim впервые появилась Techrocks.