Definieren Sie ein Textobjekt, das vom aktuellen Operator abhängt

8

Ich bin gespannt, ob es möglich ist, ein Textobjekt auf seinen Operator aufmerksam zu machen. Insbesondere schreibe ich ein Textobjekt für LaTeX-Umgebungen, in denen ich je nach Bediener ein unterschiedliches Verhalten möchte. Betrachten Sie beispielsweise das folgende LaTeX-Snippet:

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

Hier ist es am bequemsten, dieden Inhalt zeilenweise zu löschen, während cie"Hallo Welt" gelöscht wird , aber die Einrückung erhalten bleibt, dh gibt

\begin{example}
  |
\end{example}

Wo |ist der Cursor?

Karl Yngve Lervåg
quelle
1
Dies wird normalerweise nicht durch den Bediener gesteuert, sondern durch Definieren der Bewegung als linienweise oder nicht. Sie möchten vermeiden, in bestimmte Operatoren zu schreiben, damit Ihr Textobjekt auch mit benutzerdefinierten Operatoren kompatibel ist.
Tommcdo
Der ganze Punkt ist, dass ich möchte, dass die Bewegung in einigen Fällen linienweise erfolgt, in anderen Fällen jedoch nicht, je nachdem, welcher Operator verwendet wird. Ich verstehe, dass dies inkonsistent erscheinen mag, aber in diesem speziellen Fall halte ich eine solche Differenzierung für natürlich.
Karl Yngve Lervåg

Antworten:

5

Das folgende Beispiel kommt dem nahe, wonach Sie fragen:

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

Es wird ein Textobjekt erstellt w, das entweder aw, falls es vom Löschoperator verwendet wird, dw= dawoder auf iwandere Weise beispielsweise cw= ciw.

Enno
quelle
Vielen Dank! Die v:operatorVariable war genau das, wonach ich gesucht habe!
Karl Yngve Lervåg