Comment inverser une chaîne avec le script Vim


11

J'essaie d'inverser une chaîne, ce qui 'abc defg hij'devient 'jih gfed cba'. La solution que j'ai trouvée est

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

Existe-t-il une solution plus élégante ou dois-je m'en tenir à ce que j'ai trouvé?


1
Cela dépend de ce que vous entendez par «élégant». Il n'y a pas de fonction interne dédiée à inverser une chaîne, si c'est ce que vous demandez. Si vous voulez le faire avec deux appels ou moins à des fonctions internes et sans instructions supplémentaires, cela ne semble pas être possible non plus.
Sato Katsura du

1
Votre solution actuelle est déjà à la fois élégante et idiomatique.
romainl

1
Ignorez le '.' dans la partie scindée.
Christian Brabandt du

1
@SatoKatsura en fait, je pense que c'est plus efficace, car le moteur d'expression rationnelle n'a besoin de correspondre à rien. De plus, c'est la voie préférée de la documentation.
Christian Brabandt du

1
@ChristianBrabandt Selon le manuel, split()sans l' {keepempty}option devrait supprimer un seul élément vide au début et un seul élément vide à la fin. Il supprime actuellement tous les éléments vides, y compris ceux au milieu de la liste (ce qui est plus utile que le comportement documenté si vous me le demandez, mais ce n'est probablement pas le cas). Je pense que cela a été discuté récemment vim_dev.
Sato Katsura du

Réponses:


10

Votre solution est très élégante! Une alternative si vous êtes dans un environnement basé sur Unix:

!!rev

3

Depuis Wikia

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

Pour plus d'informations, voir: :h revins


2

Si vous utilisez un système de type Unix, dans vim, tapez ex-command :%! rev

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.