Я создал текстовый объект vmap для выделения текста одного LaTeX \ item:
vmap im ?\\item<CR>o/\\item\\|\\end{itemize}<CR>b$
Но это раздражает тем, что я теряю свой текущий поисковый запрос. Я читал, что условия поиска восстанавливаются, когда поиск происходит внутри вызова функции, поэтому я хотел преобразовать карту, чтобы просто вызвать функцию, которая будет выполнять поиск:
function! ItemizeTextObject()
?\\item
normal o
/\\item|\\end{itemize}
normal b$
endfunction
vmap in :call ItemizeTextObject()<CR>
К сожалению, это не работает: я получаю сообщение об ошибке («Шаблон не найден: \ item | \ end {itemize}»), текст вообще не выделен, и новая строка вставлена ниже строки, на которой находится мой курсор на. Я попробовал несколько вариантов этого, но безуспешно.
Я думаю, что основная проблема заключается в том, что я должен сохранить визуальный режим при вызове функции (o
в моей команде должен переключаться на другой конец выделения, но вместо этого вставляется новая строка), но я не знаю как.
Обновление:
Я пытаюсь получить следующее поведение: В таком тексте:
\begin{itemize}
\item lorem ipsum...
\item piece of text I want to select,
the *CURSOR* is here, and there is more text
that follows
\item lorem ipsum...
\end{itemize}
Я хочу нажать vin
, и тогда текстовый блок в середине должен быть выделен:
\item piece of text I want to select,
the *CURSOR* is here, and there is more text
that follows
означает текст с начала предыдущего \item
, но не включая следующие \item
или \end{itemize}
.