Найти в Дзене
Блокнот математика

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

Привет, коллеги. Базовую технику работы с метками-закладками мы уже обсуждали, а теперь вникнем поглубже. Что такое метки? Это способ запомнить позицию курсора, чтобы потом на нее прыгнуть. Запоминает команда m, и надо указать букву: метка m, например, ставится так: mm Переход на метку осуществляет команда ` (обратная кавычка). Пример: `m. Еще есть ', но эта команда переходит на начало помеченной строки. Это тоже бывает полезно, если вам нужна строка, а не позиция в ней. Пример: 'm. Эти команды — полноценные движения, то есть можно применять их с операторами. Так, d`m удалит все до метки m от курсора. Еще метки могут быть адресами строк: :'m,'ns/.../.../ и улавливаться якорями \%'m в регулярном выражении (вместо m — имя метки). Так, /\%'m42 совпадет только на том числе, на котором стоит метка m. Зоопарк меток Помимо меток-букв a-z, есть метки A-Z, в которых записано и имя файла. Соответственно, можно перемещаться между файлами. Они являются командами движения, если оказались в том же ф

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

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

Что такое метки? Это способ запомнить позицию курсора, чтобы потом на нее прыгнуть. Запоминает команда m, и надо указать букву: метка m, например, ставится так: mm

Переход на метку осуществляет команда ` (обратная кавычка). Пример: `m.

Еще есть ', но эта команда переходит на начало помеченной строки. Это тоже бывает полезно, если вам нужна строка, а не позиция в ней. Пример: 'm.

Эти команды — полноценные движения, то есть можно применять их с операторами. Так, d`m удалит все до метки m от курсора.

Еще метки могут быть адресами строк:

:'m,'ns/.../.../

и улавливаться якорями \%'m в регулярном выражении (вместо m — имя метки). Так, /\%'m42 совпадет только на том числе, на котором стоит метка m.

Зоопарк меток

Помимо меток-букв a-z, есть метки A-Z, в которых записано и имя файла. Соответственно, можно перемещаться между файлами. Они являются командами движения, если оказались в том же файле. Эти метки — 26 малых и 26 заглавных — в вашем распоряжении.

Есть и метки 0-9, но они выставляются автоматически и сохраняются в файле .viminfo. Метка 0 — это последняя позиция курсора при выходе из Вим (вместе с именем файла), остальные — это предыдущие позиции (то есть, 0 при выходе сохраняется в 1, 1 в 2, и т.д., а 9 теряется). Но переходить на них можно, так что `0 откроет файл, который вы редактировали перед закрытием, и переместит курсор на ту позицию, где он был.

Если не выходить из Вима месяцами, как это имеет место на моем ноутбуке, то в :marks 9 что-то такое, о чем я давно забыл))

Метка " также хранит последнюю позицию, но для каждого файла отдельно. Вот полезная автокоманда для перехода на последнюю позицию в файле:

augroup info
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
augroup END

Она еще и проверяет, что есть куда переходить. Можно и вручную перейти туда, где вы остановились: `" после открытия файла. Можно автокоманду проще записать: au BufReadPost * :normal '". Только лучше все-таки в группу поместить.

Метки [ и ] означают первый и последний символ измененного, вставленного или скопированного текста. Выставляются автоматически, но могут быть заданы вручную через m. Бывают полезны, если вы вставляете, скажем, сразу параграф текста или кусок кода.

Метки < и > помечают начало и конец выделения (для блока это может быть последний символ первой строки и первый символ последней). Причем когда выделение убрано, метки его помнят. Тоже выставляются автоматически, но можно задать вручную. Это полезно, чтобы повлиять на команду gv (выделяет то, что было выделено). Именно эти метки стоят в командной строке, когда мы повторяем команду для выделения: '<,'>s/.../.../

Метки ` и ' запоминают позицию перед прыжком. Обычно используются как команды `` (возврат на позицию) и ' ' (возврат на строку). Но `' и '` тоже работают. Могут выставляться вручную. Хорошо дополняют список прыжков.

Метки ^ и . запоминают позицию, в который вы вышли из режима вставки и позицию вблизи последней правки. Первая используется командой gi, которая начинает режим вставки там, где закончился предыдущий. Можно использовать и вручную, хотя есть список правок... смотрите сами, что комфортнее. `. работает точно так же, как g;.

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

Аналогично и метки { и }, которые отмечают начало и конец текущего абзаца.

Есть переходы к ближайшей метке. Для этого надо команду ' или ` предварить квадратной скобкой, причем ] обозначает "ниже по тексту", в [ — "выше". Имя метки, соответственно, не нужно. А вот повторитель можно указать (перед командой). Например, ]` — на ближайшую метку ниже, а 2[' — на строку, на которой вторая ближайшая метка выше по тексту.

Удалить метки позволяет команда :delmarks, в том числе и цифровые. Нельзя удалять метку '. Некоторые спецсимволы надо экранировать, например, :delmarks \"

Можно указать несколько меток или даже диапазон: delmarks a-z

Можно удалить вообще все метки, кроме A-Z и 0-9, используя команду без аргументов и с восклицательным знаком: :delmarks!

Посмотреть метки позволяет :marks, можно указать имена. Или команда покажет все метки.

Можно совершить прыжок на метку без занесения прыжка в соответствующий список: g'm или g`m, вместо m имя метки. Если вы часто пользуетесь списком прыжков, возможно, засорять его и не захотите.

Удачи, коллеги.

Оглавление рубрики

Путеводитель по каналу