Definir objeto de texto que depende del operador actual

8

Tengo curiosidad por saber si es posible hacer que un objeto de texto sea consciente de su operador. En particular, estoy escribiendo un objeto de texto para entornos LaTeX, donde quiero un comportamiento diferente según el operador. Por ejemplo, considere el siguiente fragmento de LaTeX:

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

Aquí es más conveniente dieeliminar el contenido de forma lineal, mientras que cieelimina "Hola mundo", pero conserva la sangría, es decir, da

\begin{example}
  |
\end{example}

donde |esta el cursor

Karl Yngve Lervåg
fuente
1
Normalmente, esto no se controla mediante el operador que se usa, sino definiendo el movimiento como lineal o no. Desea evitar escribir en operadores específicos para que su objeto de texto también pueda funcionar bien con operadores personalizados.
tommcdo
El punto es que quiero que el movimiento sea en línea en algunos casos, pero no en otros casos, dependiendo del operador que se use. Entiendo que esto puede parecer inconsistente, pero en este caso particular, creo que esa diferenciación es natural.
Karl Yngve Lervåg

Respuestas:

5

El siguiente ejemplo se acerca a lo que está pidiendo:

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

Crea un objeto de texto wque es aw, en caso de que lo utilice el operador de eliminación, es decir, dw= daw, o de lo iwcontrario, por ejemplo cw= ciw.

Enno
fuente
¡Gracias! ¡La v:operatorvariable era justo lo que estaba buscando!
Karl Yngve Lervåg