Como reverter uma string com o script Vim

11

Estou tentando reverter uma string, para que isso 'abc defg hij'se torne 'jih gfed cba'. A solução que eu vim com é

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

Existe uma solução mais elegante ou devo me ater ao que foi apresentado?

René Nyffenegger
fonte
1
Depende do que você quer dizer com "elegante". Não há função interna dedicada a reverter uma string, se é isso que você está perguntando. Se você quer fazer isso com duas ou menos chamadas para funções internas e sem instruções adicionais, isso também não parece possível.
Sato Katsura
1
Sua solução atual já é elegante e idiomática.
Romainl
1
Ignore o '.' na parte dividida.
Christian Brabandt
1
@SatoKatsura, na verdade, acho que é mais eficiente, porque o mecanismo regexp não precisa corresponder a nada. Além disso, esta é a maneira preferida da documentação.
Christian Brabandt
1
@ChristianBrabandt De acordo com o manual, split()sem a {keepempty}opção, remova um único item vazio no início e um único item vazio no final. Atualmente, ele remove todos os itens vazios, incluindo os que estão no meio da lista (o que é mais útil que o comportamento documentado, se você me perguntar, mas provavelmente não o é). Eu acho que isso foi discutido recentemente vim_dev.
Sato Katsura

Respostas:

10

Sua solução é muito elegante! Uma alternativa se você estiver em ambiente baseado em Unix:

!!rev
JJoao
fonte
3

Da wikia

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

Para mais informações, consulte: :h revins

SergioAraujo
fonte
2

Se você estiver usando um sistema unix, no vim, digite ex-command :%! rev

KeeeeiZ
fonte