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?


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

3

Z Wikii

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

Więcej informacji: :h revins


2

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.