2016-05-15 2 views

Antwort

1

Weiteres (noch kürzer) Lösung:

:exe "'<,'>norm 0f:\<C-X>" 

Aber wenn Sie nichts dagegen haben mit Ctrl - VCtrl-X zu bekommen ^X, könnten Sie den folgenden Code verwenden:

:'<,'>norm 0f:^X 

wo ^X (von :help CTRL-X):

Subtrahiert von der Anzahl oder alphabetische Zeichen an oder nach dem Cursor.

1

In visuellem Block eine mögliche Lösung nur für ausgewählten optischen Block, nicht für ganze Puffer/Datei (oder in einem Bereich von Linien) arbeiten:

:`<,`>s/:\(\d\+\)}/\=":".(submatch(1) -1)."}"/g 
+1

Hinweis: Obwohl Sie einen visuellen Block verwenden, wird Ihr Befehl tatsächlich auf der gesamten Zeile ausgeführt (siehe [diese] (http://vi.stackexchange.com/q/6898/6698) und [this] (http://vi.stackexchange.com/q/7388/6698) Fragen). Übrigens könnte es verkürzt werden auf: <,'> s /: \ zs \ d \ + \ ze}/\ = submatch (0) -1/g' –

+1

@JairLopez: ': '<,'> s/\% V: \ zs \ d \ + \ ze} \% V/\ = submatch (0) -1/g' stellt sicher, dass die Übereinstimmung vollständig innerhalb des visuellen Blockes liegt (und Teile der Linie auslassen, die nicht vom visuellen Block abgedeckt sind). – Amadan