¿Cómo invierto una cadena con el script Vim

11

Estoy tratando de invertir una cadena, por lo que se 'abc defg hij'convierte 'jih gfed cba'. La solución que se me ocurrió es

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

¿Existe una solución más elegante o debería seguir con lo que se me ocurrió?

René Nyffenegger
fuente
1
Depende de lo que quieras decir con "elegante". No hay una función interna dedicada a invertir una cadena, si eso es lo que está preguntando. Si te refieres a hacerlo con dos o menos llamadas a funciones internas y sin declaraciones adicionales, tampoco parece posible.
Sato Katsura el
1
Su solución actual ya es elegante e idiomática.
romainl 01 de
1
Salta el '.' en la parte partida
Christian Brabandt
1
@SatoKatsura en realidad, creo que es más eficiente, porque el motor regexp no necesita coincidir con nada. Además, esta es la forma preferida de la documentación.
Christian Brabandt
1
@ChristianBrabandt De acuerdo con el manual, split()sin la {keepempty}opción debe eliminar un solo elemento vacío al principio y un único elemento vacío al final. Actualmente elimina todos los elementos vacíos, incluidos los que están en el medio de la lista (que es más útil que el comportamiento documentado si me pregunta, pero probablemente no lo sea). Creo que esto se ha discutido recientemente vim_dev.
Sato Katsura

Respuestas:

10

¡Tu solución es muy elegante! Una alternativa si está en un entorno basado en Unix:

!!rev
JJoao
fuente
3

De wikia

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

Para más ver: :h revins

SergioAraujo
fuente
2

Si está utilizando un sistema similar a Unix, en vim, escriba ex-command :%! rev

KeeeeiZ
fuente