Jak odwrócić ciąg za pomocą skryptu Vim

11

Próbuję odwrócić ciąg znaków, aby tak się 'abc defg hij'stało 'jih gfed cba'. Rozwiązaniem, które wymyśliłem, jest

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

Czy istnieje bardziej eleganckie rozwiązanie, czy powinienem trzymać się tego, co wymyśliłem?

René Nyffenegger
źródło
1
To zależy od tego, co rozumiesz przez „elegancki”. Nie ma wewnętrznej funkcji odwracania łańcucha, jeśli o to pytasz. Jeśli masz na myśli wykonanie dwóch lub mniej wywołań funkcji wewnętrznych i bez dodatkowych instrukcji, to również nie wydaje się możliwe.
Sato Katsura
1
Twoje obecne rozwiązanie jest już zarówno eleganckie, jak i idiomatyczne.
romainl
1
Pomiń „.” w części podzielonej.
Christian Brabandt
1
@SatoKatsura faktycznie, myślę, że jest bardziej wydajny, ponieważ silnik regexp nie musi do niczego pasować. Ponadto jest to preferowany sposób z dokumentacji.
Christian Brabandt
1
@ChristianBrabandt Zgodnie z instrukcją, split()bez {keepempty}opcji należy usunąć pojedynczy pusty element na początku i pojedynczy pusty element na końcu. Obecnie usuwa wszystkie puste elementy, w tym te znajdujące się na środku listy (co jest bardziej przydatne niż udokumentowane zachowanie, jeśli mnie o to poprosisz, ale prawdopodobnie nie jest). Myślę, że zostało to ostatnio omówione vim_dev.
Sato Katsura

Odpowiedzi:

10

Twoje rozwiązanie jest bardzo eleganckie! Alternatywą, jeśli jesteś w środowisku env opartym na Uniksie

!!rev
JJoao
źródło
3

Z Wikii

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

Więcej informacji: :h revins

SergioAraujo
źródło
2

Jeśli używasz systemu uniksowego, w vimie wpisz ex-command :%! rev

KeeeeiZ
źródło