Définir un objet texte qui dépend de l'opérateur actuel

8

Je suis curieux de savoir s'il est possible de rendre un objet texte conscient de son opérateur. En particulier, j'écris un objet texte pour les environnements LaTeX, où je veux un comportement différent selon l'opérateur. Par exemple, considérez l'extrait de code LaTeX suivant:

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

Ici, il est plus pratique de diesupprimer le contenu d'une manière linéaire, alors que cie"Hello world" est supprimé, mais conserve l'indentation, c'est-à-dire, donne

\begin{example}
  |
\end{example}

|est le curseur.

Karl Yngve Lervåg
la source
1
Ceci est normalement contrôlé non pas par l'opérateur utilisé, mais en définissant le mouvement comme linéaire ou non. Vous voulez éviter d'écrire sur des opérateurs spécifiques afin que votre objet texte puisse également bien fonctionner avec des opérateurs personnalisés.
tommcdo
Le fait est que je veux que le mouvement soit linéaire dans certains cas, mais pas dans d'autres cas, selon l'opérateur utilisé. Je comprends que cela puisse sembler incohérent, mais dans ce cas particulier, je pense qu'une telle différenciation est naturelle.
Karl Yngve Lervåg

Réponses:

5

L'exemple suivant se rapproche de ce que vous demandez:

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

Il crée un objet texte wqui est aw, au cas où il est utilisé par l'opérateur de suppression, c'est-à-dire dw= dawou iwautrement, par exemple cw= ciw.

Enno
la source
Merci! La v:operatorvariable était exactement ce que je cherchais!
Karl Yngve Lervåg