Wie kann ich einen String mit dem Vim-Skript umkehren?


11

Ich versuche eine Zeichenfolge umzukehren, damit das 'abc defg hij'wird 'jih gfed cba'. Die Lösung, die ich gefunden habe, ist

join(reverse(split(l:text, '.\zs')), '')

Gibt es eine elegantere Lösung oder sollte ich mich an das halten, was ich mir ausgedacht habe?


1
Es kommt darauf an, was Sie unter "elegant" verstehen. Es gibt keine interne Funktion zum Umkehren eines Strings, wenn Sie danach fragen. Wenn Sie dies mit zwei oder weniger Aufrufen interner Funktionen und ohne zusätzliche Anweisungen tun möchten, scheint dies ebenfalls nicht möglich zu sein.
Sato Katsura

1
Ihre aktuelle Lösung ist bereits elegant und idiomatisch.
Romainl

1
Überspringen Sie das '.' im geteilten Teil.
Christian Brabandt

1
@SatoKatsura eigentlich denke ich, dass es effizienter ist, weil die Regexp-Engine mit nichts übereinstimmen muss. Darüber hinaus ist dies der bevorzugte Weg aus der Dokumentation.
Christian Brabandt

1
@ChristianBrabandt Laut Handbuch sollte split()ohne die {keepempty}Option ein einzelnes leeres Element am Anfang und ein einzelnes leeres Element am Ende entfernt werden. Derzeit werden alle leeren Elemente entfernt, einschließlich der Elemente in der Mitte der Liste (was nützlicher ist als das dokumentierte Verhalten, wenn Sie mich fragen, aber wahrscheinlich nicht). Ich denke, das wurde kürzlich am diskutiert vim_dev.
Sato Katsura

Antworten:


10

Ihre Lösung ist sehr elegant! Eine Alternative, wenn Sie sich in einer Unix-basierten Umgebung befinden:

!!rev

3

Aus Wikia

vnoremap <Leader>r c<C-O>:set revins<CR><C-R>"<Esc>:set norevins<CR>

Weitere Informationen finden Sie unter: :h revins


2

Wenn Sie ein Unix-ähnliches System verwenden, geben Sie in vim den Befehl ex-command ein :%! rev

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.