Definir objeto de texto que depende do operador atual

8

Estou curioso para saber se é possível tornar um objeto de texto ciente de seu operador. Em particular, estou escrevendo um objeto de texto para ambientes LaTeX, onde desejo um comportamento diferente, dependendo do operador. Por exemplo, considere o seguinte trecho de código LaTeX:

\begin{example}
  Hello world
\end{example}

Aqui é mais conveniente dieexcluir o conteúdo de maneira linear, enquanto cieexclui "Hello world", mas preserva o recuo, ou seja, fornece

\begin{example}
  |
\end{example}

onde |está o cursor

Karl Yngve Lervåg
fonte
1
Normalmente, isso não é controlado pelo operador usado, mas pela definição do movimento na linha ou não. Você deseja evitar a gravação em operadores específicos, para que seu objeto de texto também seja compatível com operadores personalizados.
tommcdo
O ponto principal é que eu quero que o movimento seja linear em alguns casos, mas não em outros casos, dependendo de qual operador é usado. Entendo que isso possa parecer inconsistente, mas nesse caso em particular, acho que essa diferenciação é natural.
Karl Yngve Lervåg

Respostas:

5

O exemplo a seguir se aproxima do que você está pedindo:

onoremap <expr> w '<esc>' . v:operator . v:count1 . (v:operator ==# 'd' ? 'aw' : 'iw')

Ele cria um textobject wque é aw, caso seja usado pelo operador delete, ou seja, dw= dawou de iwoutra forma, por exemplo cw= ciw.

Enno
fonte
Obrigado! A v:operatorvariável era exatamente o que eu estava procurando!
Karl Yngve Lervåg