Перевод статьи «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 } ↑
Такой способ перемещения полезен, когда файлы состоят из нескольких функций. В большинстве языков концом функции является }
в начале строки (первый столбец). При помощи ][
можно прыгнуть к концу следующей функции, а при помощи []
— к концу предыдущей.
Также есть:
]]
— прыжок вперед, к следующей{
в первом столбце[[
— прыжок назад, к следующей{
в первом столбце
На практике символ {
не так часто появляется в первом столбце. Лично мне редко выпадает случай воспользоваться этими командами, но они есть. Если вы знаете сценарии, где ]]
и [[
могут быть полезны, поделитесь в комментариях!
Заключение
В заключение хочу сказать, что овладение командами %
, [(
, [{
, ][
и []
может очень ускорить перемещение по файлам программ. Каждая из команд предлагает уникальный функционал, подходящий для определенных ситуаций, а вместе они обеспечивают легкое и быстрое перемещение по коду.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]