Zum Beispiel habe ich den folgenden Ausdruck Mapping: Wegwerfen Zählung in <expr> Mappings
function! DelNthSpace() let col=match(getline('.'), '[[:blank:] ]', col('.'), v:count1) return virtcol([line('.'), col+1])."|s \e" endfunction nnoremap s DelNthSpace()Sie sehen,
v:count1
ist hier bereits behandelt. Aber wenn ich versuche, den zweiten Platz durch eine solche Funktion zu ersetzen, die sich zum Beispiel in der virtuellen Spalte
35
befindet (dies wird geschehen, wenn Sie den Cursor auf die return-Anweisung setzen), versucht dieser, zur Spalte
235
zu gehen und sie zu ersetzen von
2s
zu
2{DelNthSpace()}
->
235|s ^[
umgewandelt werden. Jetzt werde ich nackten nutzlos
|
am Anfang der Return-Anweisung vor, die unnötige Zählung verbraucht, aber ich mag diese Lösung nicht, wie es zwei Bewegungen statt einer verwendet.
UPDATE: Ich sollte mehr Kontext zur Verfügung gestellt haben:
function! ToNthSpace()
let col=match(getline('.'), '[[:blank:] ]', col('.'), v:count1)
return virtcol([line('.'), col+1])."|"
endfunction
noremap <expr> s ToNthSpace()
eine Reihe von Funktionen gibt, die diese verwenden, imitiert einen Befehl ersetzen, sondern transliteriert ihr Argument (so, während r$ii
Aufruf ersetzen Zeichen mit $
und Einfügen i
, \tr$ii
ersetzt Zeichen mit ∬
, das gleiche Verhältnis zwischen t
und \tt
und einige andere), andere sind Bewegungen. Da diese Funktionen Bewegungen definieren, kann ich :<C-u>
nicht verwenden, es wird den visuellen Modus verlassen (oder ich muss einen Hack hinzufügen, der anzeigt, welche Modusfunktion aufgerufen wurde). Ich kenne diesen Hack nicht und kann keine verschiedenen Zuordnungen für normale und visuelle Modi definieren.
Ich bin upvoting, weil der Titel fragt, was ich selbst brauche, aber es ist schwer, durch den Text zu kommen, nicht klar für mich, wenn die Angabe aller Details einer ganz besonderen Anwendung notwendig ist. – Alexey
Ich habe eine verwandte Frage: Wenn Sie eine Zählung in Vim im Visual-Modus eingegeben haben, aber dann entschieden, dass die Zählung falsch oder unnötig war, wie können Sie die Zählung abbrechen, ohne Visual-Modus zu verlassen? – Alexey
@Alexey Es scheint, dass Sie Ihre eigene Frage beantwortet haben: '@ _' funktioniert dafür. Keine Möglichkeit, dies im Operator-anhängigen Modus zu tun, von dem ich weiß (und ich wusste eigentlich nicht von '@ _'). – ZyX