Kehren Sie jedes Wort in einer Zeile in vim um


9

Ihre Aufgabe ist es, ein Vim-Skript zu erstellen oder eine Folge von Tastenanschlägen bereitzustellen, die eine einzelne Textzeile mit bis zu 140 druckbaren ASCII-Zeichen (an einer beliebigen Stelle in einer Datei, wobei der Cursor an einer beliebigen Stelle in der Zeile beginnt) ausführen und jedes Leerzeichen umkehren. getrennte Zeichenfolge im Satz, während die Zeichenfolgen in derselben Reihenfolge gehalten werden.

Zum Beispiel die Eingabe:

roF emos nosaer m'I gnisu a retcarahc-041 timil no siht noitseuq neve hguoht ti t'nseod evlovni .rettiwT RACECAR  

sollte zurückkehren:

For some reason I'm using a 140-character limit on this question even though it doesn't involve Twitter. RACECAR  

Das Skript mit den wenigsten Zeichen oder der Folge der wenigsten Tastenanschläge, um dieses Ergebnis zu erzielen, ist der Gewinner.


1
"Für die Zwecke dieser Frage ist es nur vim" scheint eine ebenso willkürliche Sprachbeschränkung zu sein wie das Posten einer normalen Code-Golf-Herausforderung und das Bitten nur um Antworten in C. ( Und ich scheine mit dieser Meinung nicht allein zu sein. )
Martin Ender

27
Warum wird RACECAR nicht umgekehrt?
Orlp

3
Weil es ein Palindrom ist. Versuchen Sie es selbst umzukehren.
Joe Z.

2
Wow, ich bin dumm. Derp.
Orlp

7
@orlp Lol. Ich dachte du machst Witze.
mbomb007

Antworten:


9

28 25 24 Tastenanschläge

:se ri<CR>^qqct <C-r>"<Esc>f l@qq@q

Rekursives Makro, ich gehe davon aus, dass Ctrl- rals ein Tastendruck zählt.

Am schwierigsten war es, sicherzustellen, dass das Makro in derselben Zeile bleibt und den Rest der Datei nicht zerstört.


Sie könnten cEstattdessen verwenden ct , wenn das Makro nicht beendet wird. Aber Sie können verwenden Wanstelle von f l2 - Takter zu speichern.
Caek

@ Caek Falsch x2. Ratet mal, was cEpassiert, wenn sich der Cursor am Anfang von befindet a retcarahc-041? Und raten Sie mal, was Wpassiert, wenn wir am Ende der Leitung stehen?
Orlp

Beachten Sie die Hauptstadt E. Kleinbuchstaben ewürden bis zum Bindestrich gehen, Kapital Ewürde bis zum nächsten Leerzeichen gehen. Ich habe es nur versucht, um zu bestätigen.
Caek

versuchen Sie: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qfür 23.
Caek

@ Caek Das wird nicht funktionieren. Und Ewas das betrifft, weiß ich, was es tut. Ich bezog das cE<C-r><Esc>würde sich a retcarahc-041in 140-character aAKA wäre es die Worte tauschen.
Orlp

3

24 Tastenanschläge

ma:s/ /\r/g
V'a:!rev
gvJ

Ich weiß , diese Frage ist sehr alt, aber ich liebe vimgolf so konnte ich nicht nicht eine Antwort auf eine der wenigen vim spezifischen Herausforderungen auf der Website veröffentlichen. Außerdem ist diese Lösung mit der von Orlp verbunden.

Genau wie Orlp sagte, war es am schwierigsten sicherzustellen, dass der Rest des Puffers unverändert blieb. Ohne diese Einschränkung könnten wir einfach Folgendes tun:

:s/ /\r/g
!{rev
V}J

(19 Tastenanschläge), aber wir brauchen ein bisschen mehr, um es puffersicher zu halten. Dies setzt eine Unix-Umgebung voraus.

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.