Invierta cada palabra en una línea en vim

9

Su tarea es crear un script vim o proporcionar una secuencia de pulsaciones de teclas que opere en una sola línea de texto con hasta 140 caracteres ASCII imprimibles (en cualquier parte de un archivo, con el cursor comenzando en cualquier lugar de la línea) e invierta cada espacio. cadena separada en la oración manteniendo las cadenas en el mismo orden.

Por ejemplo, la entrada:

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

debería volver:

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

El guión con la menor cantidad de caracteres, o la secuencia de la menor cantidad de pulsaciones de teclas, para lograr este resultado es el ganador.

Joe Z.
fuente
1
"A los fines de esta pregunta, es solo vim" parece una restricción de idioma tan arbitraria como publicar un desafío de golf de código normal y pedir solo respuestas en C. ( Y no parece estar solo con esta opinión ) .
Martin Ender
27
¿Por qué no se invierte RACECAR?
orlp
3
Porque es un palíndromo. Intenta revertirlo tú mismo.
Joe Z.
2
Wow, soy estúpido Derp.
orlp
77
@orlp Lol. Pensé que estabas bromeando.
mbomb007

Respuestas:

9

28 25 24 pulsaciones de teclas

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

Macro recursiva, supongo que Ctrl- rcuenta como un golpe de teclado.

La parte más difícil fue asegurarse de que la macro permanezca en la misma línea y no destruya el resto del archivo.

orlp
fuente
Podría usar en cElugar de ct , si no estaba terminando la macro. Pero puede usar en Wlugar de f lguardar 2 golpes.
Caek
@Caek Wrong x2. ¿Adivina qué cEhace cuando el cursor está al principio de a retcarahc-041? ¿Y adivina qué Whace cuando estamos al final de la línea?
orlp
Tenga en cuenta la capital E. las minúsculas eirían hasta el guión, las mayúsculas Eirían hasta el siguiente espacio. Solo lo intenté para confirmar.
Caek
probar: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qpor 23.
Caek
@Caek Eso no funcionará. Y con respecto E, sé lo que hace. Me refería a que cE<C-r><Esc>se convertiría a retcarahc-041en 140-character aAKA, que cambiaría las palabras.
orlp
3

24 pulsaciones de teclas

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

Sé que esta pregunta es muy antiguo, pero amo vimgolf así que no podía no publicar una respuesta en uno de los pocos retos vim-específicas en el sitio. Además, esta solución está vinculada con Orlp's.

Al igual que Orlp dijo, la parte más difícil fue asegurarse de que el resto del búfer no se modificara. Si no fuera por esa restricción, simplemente podríamos hacer:

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

(19 pulsaciones de teclas) pero necesitamos un poco más para mantenerlo a salvo de búfer. Esto supone un entorno unix.

James
fuente