Come invertire una stringa con lo script Vim


11

Sto cercando di invertire una stringa, in modo che 'abc defg hij'diventi 'jih gfed cba'. La soluzione che ho trovato è

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

Esiste una soluzione più elegante o devo attenermi a ciò che ho escogitato?


1
Dipende da cosa intendi per "elegante". Non esiste una funzione interna dedicata all'inversione di una stringa, se è quello che stai chiedendo. Se intendi farlo con due o meno chiamate a funzioni interne e senza dichiarazioni aggiuntive, neanche quello sembra essere possibile.
Sato Katsura,

1
La tua attuale soluzione è già sia elegante che idiomatica.
romainl

1
Salta il '.' nella parte divisa.
Christian Brabandt,

1
@SatoKatsura in realtà, penso che sia più efficiente, perché il motore regexp non ha bisogno di eguagliare nulla. Inoltre, questo è il modo preferito dalla documentazione.
Christian Brabandt,

1
@ChristianBrabandt Secondo il manuale, split()senza l' {keepempty}opzione dovrebbe rimuovere un singolo oggetto vuoto all'inizio e un singolo oggetto vuoto alla fine. Attualmente rimuove tutti gli elementi vuoti, compresi quelli in mezzo all'elenco (che è più utile del comportamento documentato se me lo chiedi, ma probabilmente non lo sei). Penso che questo sia stato discusso recentemente vim_dev.
Sato Katsura,

Risposte:


10

La tua soluzione è molto elegante! Un'alternativa se ti trovi in ​​ambiente Unix:

!!rev

3

Dalla wiki

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

Per di più vedi: :h revins


2

Se stai usando un sistema simile a unix, in vim, digita ex-command :%! rev

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.