5

В вопросе о jVi и его способности анализировать .vimrc автор приводит пример сложной привязки vim, которую он утверждает, что jVi не сможет обработать:

inoremap hh <c-o>?\%<c-r>=line('.')<Return>l\({}\\|\[]\\|<>\\|><\\|()\\|""\\|''\\|><lt>\)?s+1<Return>

Интересно, что (в основном как) это делает. Пока я получаю:

  • <co>: выполнить одну команду в обычном режиме и вернуться в режим вставки
  • ?/% n: искать назад символ с указанным кодом dec / hex
    • какой смысл вставлять здесь номер строки?
  • последняя часть ищет определенную комбинацию скобок и помещает туда курсор
    • Я не понимаю , как l может быть использован как и

Хотите уточнить?

1 ответ1

4

Ctrl+O , как вы указали. А первое ? действительно начинает обратный поиск.

Последовательность шаблона, такая как \%15l ограничивает поиск строкой 15, где l после первого <Return> является концом такой последовательности. Отображение использует Ctrl+R, специальный регистр = (:help i_CTRL-R) и строку выражения line('.') Чтобы вставить номер текущей строки в эту последовательность, предотвращая переход поиска на другую строку.

Остальная часть картирования до финала ? символ - это довольно простое регулярное выражение, которое соответствует любой последовательности символов.

Финал ? указывает конец шаблона, часть s+1 устанавливает курсор на 1 символ после начала соответствия (:help search-offset).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .