Найти тему
Блокнот математика

Рубрика "Секреты Вим". Скобки.

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

При работе с текстом скобки встречаются не настолько часто, чтобы требовались средства для борьбы с ними, однако в программировании они употребляются весьма часто и таковые средства становятся весьма полезны. При этом некоторые из нижеприведенных возможностей мало известны и их трудно найти в справке.

В каких-то языках скобок больше, в каких-то меньше. Есть языки, почти целиком состоящие из скобок, например, LISP (Lots of Idiotic Silly Parenthesis)))))), а есть такие, где скобок почти нет (Forth, PostScript).

Под скобками мы понимаем как круглые (parenthesis), так и квадратные [brackets] и фигурные {curly brackets}.

Итак, первая команда --- это знак процента, %. Эта команда движения прыгает на парную скобку к текущей (ближайшей к курсору справа). Ее можно использовать для удаления и копирования: d% , а также выделения: v%. Она правильно отслеживает вложенность и очень удобна.

В отличие от других команд, эта не принимает повторителя: 50% --- это команда движения на строку, которая примерно посередине текста. Это тоже удобно, отмотать нужную долю текста (25%, 60%, 90%), но это другая команда!

Помимо трех видов скобок, команда % применима к комментариям Си /*...*/ и условным операторам препроцессора # if, # ifdef, # else, # elif, # endif.

Учитываются экранирующие слеши; так, \(...) --- не парные скобки! Это можно отключить, чтобы слеши игнорировались (если надо, конечно).
Скобки внутри кавычек, двойных и одинарных, тоже игнорируются, однако '(...)' обработается правильно. Впрочем, (...')'...) --- тоже.

Возможна проблема с комментарием, точнее, скобками там. Так, (//...) будет расценено как пара скобок.

Вторая команда, точнее, серия --- [(, [{, ]), ]}. Они, соответственно, прыгают на: предыдущую незакрытую открывающую круглую/фигурную скобку (она может быть закрыта правее, неважно), или незакрытую закрывающую правее (у нее может быть пара левее курсора, опять же). Команды приемлют повторитель.

Например, у нас написано (9(8(7)6)5) и курсор на семерке. Команда 2[( прыгает на скобку перед восьмеркой, а затем 2]) --- на скобку после пятерки.

Наконец, третья возможность. Команды удаления, копирования и выделения могут принимать модификатор i, который означает "в скобках" и распространяет действие команды на все содержимое парных скобок. Например, di( --- удалить все внутри ближайшей к курсору пары круглых скобок. vi) --- выделить, а yi[ --- скопировать все, что в квадратных. Сам скобки не подпадают под команду, и указывать можно хоть открывающую, хоть закрывающую --- важен тип.

Например: (1+(2+(3+(4+...)))), курсор на тройке. Нажимаем di( и получаем (1+(2+())). Команда работает для уголковых скобок тоже: <>.

На сегодня всё, всем удачи!

Вим отметил парную скобку и прыгнет на нее по команде %.
Вим отметил парную скобку и прыгнет на нее по команде %.