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

Рубрика "Секреты Вим". Визуальные закладки.

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

Вот. Зеленые линии --- это они. И  пометка !> --- тоже.
Вот. Зеленые линии --- это они. И пометка !> --- тоже.

Закладка --- это некоторый текст из одного или двух символов слева, левее номеров строк, и, возможно, выделение цветом текста помеченной строки. Их можно ставить, удалять, и на них можно переходить.

Сначала вспомним, как создавать цветовые схемы. Для этого служит команда highlight:

highlight boo ctermbg=2 ctermfg=0

Мы создали выделение по имени boo, которое делает фон текста зеленым, а сам текст --- серым. Эту команду лучше поместить в .vimrc

Далее мы создаем тип закладки:

sign define mybookmark text=!> linehl=boo texthl=boo

Здесь sign define --- команда, mybookmark --- имя новой закладки, которую можно вложить куда потребуется: она будет помечена слева текстом !> (можно любые два печатные символа: ++, >>, --, ->, -: и так далее, что вам больше по душе), текст этот будет выделен цветом согласно определению boo (texthl), строка, которую вы пометите, будет выделена так же (linehl). Эта команда тоже раз навсегда помещается в .vimrc. Вы можете, разумеется, насоздавать сколько угодно разных типов закладок: "важное", "ошибки", "проверить" --- с разными цветами и разными двухбуквенными маркерами разного цвета.

Поместить закладку на строку позволяет команда sign place, причем закладке присваивается номер и надо указать номер строки и файл. Команда неудобная, и лучше ее повесить на горячую клавишу. Например, так:

map <F9> :exe ":sign place 666 line=" . line(".") ." name=mybookmark file=" . expand("%:p")<CR>

Мы назначаем клавише F9 сложную команду, которая размещает закладку с идентификатором 666 в текущем файле на строке курсора.

Неудобство: такой горячей клавишей вы можете разместить много закладок, но под одним и тем же номером. Ничего страшного, но прыгать можно только на самую верхнюю в файле. В общем-то, это даже удобно: вы пометили ряд проблемных мест, и потом идете сверху вниз по ним, снимая закладки по мере решения проблем.

Но можно повесить две-три команды на разные клавиши!

Удалить закладку позволяет команда sign unplace, которая без параметров удаляет закладку со строки. С параметрами --- удаляет ту, на которую укажете.

Ее можно повесить на Ctrl+F9, например:

map <C-F9> :sign unplace<CR>

Неудобство, упомянутое выше, сохраняется: удалять можно закладки только сверху вниз.

Наконец, прыгать на закладку по ее номеру позволяет команда sign jump. Она тоже требует указать файл, что немного громоздко, и лучше повесить ее на клавишу; скажем, на Shift+F9:

map <S-F9> :exe ":sign jump 666 file=" . expand("%:p")<CR>

Теперь вы можете прыгнуть на закладку если она одна с данным идентиикатором, или на самую верхнюю из закладок с данным идентификатором, если их несколько.

sign list покажет вам ваши закладки.

Резюмируем. Закладки, при некоторой описанной выше подготовке, позволяют комфортно делать две вещи:

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

На это надо "потратить" три горячие клавиши, например, F9 и ее же с shift и ctrl. Можно потратить больше клавиш и иметь больше закладок.

Насколько оно вам надо --- смотрите сами...

Навигатор по каналу