Как перемещаться между скобками в Vim

Перевод статьи «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( не обязательно. Того же эффекта можно достичь при помощи просто %.

Дело в том, что под капотом % работает следующим образом:

  1. Находит первую скобку из пары, находящуюся под курсором или за ним, т. е. (.
  2. Прыгает к ее парной скобке — ).

Возможно, использование %, когда скобка не под курсором, не слишком интуитивно. Тем не менее, привыкнув, вы сможете перемещаться просто волшебным образом!

2. [( и [{

  • [( — прыжок назад, к первой круглой скобке, не имеющей пары (()
  • [{ — прыжок назад, к первой фигурной скобке, не имеющей пары ({)

Пример:

{

  example

  text
  ↑
}

Нажимаем [{:

{
↑
  example

  text

}

Помимо [( и [{ у нас есть еще ]) и ]}:

  • ]) — прыжок вперед, к первой круглой скобке, не имеющей пары ())
  • ]} — прыжок вперед, к первой фигурной скобке, не имеющей пары (})

Рассмотрим практический пример. Представьте, что вам нужно перемещаться внутри большой функции:

function example() {
  const sum = 0;
  ↑ 
  for (let i = 0; i < 10; i++) {
    sum += i;
  }

  // Какие-то еще действия, занимающие много строк кода
  // ...

  return sum;
}

Скажем, вы хотите переместиться к закрывающей фигурной скобке этой функции. Это можно сделать несколькими способами:

  1. Использовать относительный прыжок, например, 12j, чтобы прыгнуть прямо к }. Этот подход работает для меньших функций. Но в этом примере он бесполезен, так как функция слишком большая и последняя ее строка за пределами видимости экрана.
  2. Использовать /} для поиска }. Это могло бы сработать, если бы внутри функции не было других }. Но у нас есть другие }, поэтому, чтобы добраться до последней, вам придется многократно нажимать n.
  3. Использовать ]}. Это самый эффективный метод. Он переместит вас прямо к закрывающей фигурной скобке, завершающей функцию. При этом вам не придется считать строки или повторять поиск.

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]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх