Привет, коллеги. Мы уже обсудили семейства команд на g (самые разнообразные и порой очень полезные) и на z (в основном, фолдинг; но не только). Теперь обсудим третью серию: команды, начинающиеся на одну из двух квадратных скобок.
Поскольку скобок две, то команды идут парами; например, одна ищет что-то вверх, а другая вниз. Команд довольно много, и они большей частью призваны облегчить жизнь программистам на Си, С++, Java, и других языках с си-подобным синтаксисом.
Давайте начнем с тех, что в эту серию не входят. Большинство команд могут употребляться с повторителем.
[c или ]c — назад или вперед на начало различия (при работе в режиме diff).
[s или ]s — предыдущее/следующее слово с орфографической ошибкой.
[z или ]z — переход на начало/в конец открытого фолда
[' и [` — Ищут ближайшую метку выше по тексту, курсор на первый непробельный символ строки или на саму метку. Вариант с ] ищет метку ниже по тексту.
[f или ]f — синонимы gf: открывают файл, имя которого в тексте под курсором. Впрочем, это чаще всего нужно для открытия тех самых include-ов.
[p или [P — синонимы, вставляют текст из регистра, как "P" (вставка выше курсора), но выравнивают его по текущей строке. С ] аналог p.
Далее приведем команды, которые полезны в первую очередь при работе с кодом. Ориентация на Си, хотя кое-что полезно и для других языков. А кое-что рассчитано именно на си-подобный язык и можно переопределять под свои нужды. Повторитель также может быть употреблен.
[ CTRL-D — Ищет определение слова под курсором в текущем файле и в заголовочных (# include), начиная с начала текущего. Под определением понимается препроцессорное # define. Например, под курсором слово true; нажатие [ и затем <C-D> переместит курсор на определение
# define true false. Вариант с ] начинает поиск с позиции курсора.
[D или [d — Покажут все определения или первое определение, не перемещая курсор. Вариант с ] начинает поиск с позиции курсора.
[# — Ищет выше курсора незакрытый # if, # else or # ifdef. Вариант с ] ищет вниз.
Эти команды прямо ориентированы на препроцессор, который, впрочем, не только для Си полезен. Идем далее:
[ CTRL-I — Аналогично [ CTRL-D, но ищет само слово под курсором — первое вхождение. Начинает с верха текущего файла, заглядывает в заголовочные (этим отличается от gD). Вариант с ] начинает поиск с позиции курсора.
[I или [i — Покажут все вхождения слова или первое, не перемещая курсор. Вариант с ] начинает поиск с позиции курсора.
Эти команды ориентируются на # include. Далее:
[/ или [* — Ищет выше по тексту комментарий Си, курсор на начало. Вариант с ] ищет вниз и курсор на конец комментария.
[[ или [] — Ищет выше по тексту открывающую/закрывающую фигурную скобку, которая первая на строке.
]] или ][ — Ищет ниже по тексту открывающую/закрывающую фигурную скобку, которая первая на строке. Команда ]] после оператора захватит также и закрывающую скобку, если она первая на строке.
Эти команды удобны для отлова тел функций в Си при условии, что вы ставите скобки в начале строки. Если нет, есть смысл переопределить эти команды. Следующие две пары просто ищут скобки:
[{ или ]} — переход назад/вперед на незакрытую фигурную скобку (соответственно, открывающую или закрывающую).
[( или ]) — переход назад/вперед на незакрытую круглую скобку (соответственно, открывающую или закрывающую).
Следующие четыре команды рассчитаны на синтаксис С++ или Java или другого языка из этого семейства:
[m или ]m — назад или вперед на метод в классе, в его начало. Если M, то в конец метода. Если метод не найдется, переход на начало или конец определения класса. Вне класса работать не будут: если не найдут подходящей скобки, выдадут ошибку, а если найдут, то перейдут туда и это вряд ли то, что вы ожидаете.
Вот такие вот тонкости умеет вытворять Вим! Удачи, коллеги.