在Vim中反转一个单词

Jog*_*usa 13 python regex vim

如何在Vim中翻转一个单词?最好使用正则表达式或正常模式命令,但也欢迎其他方法:

word =>卓尔

谢谢你的帮助!PS:我在Windows XP中

Python内置在我的vim中,但不支持Perl.

har*_*dsv 7

这是另一个(pythonic)解决方案,基于它的工作原理:

:echo join(reverse(split('hello', '.\zs')), '')
olleh
Run Code Online (Sandbox Code Playgroud)

如果要替换缓冲区中的所有单词,

:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g
Run Code Online (Sandbox Code Playgroud)

这首先要在单词中创建一个字符列表,然后将其反转并连接起来形成单词.substitute命令查找每个单词,然后将单词传递给表达式并将结果用作替换.


the*_*rel 5

此提示可能会有所帮助:http : //vim.wikia.com/wiki/Reverse_letters

它说:

只需启用视觉模式 (v),突出显示您想要反转的字符,然后点击\is。对于单个单词,您可以使用 vw(或 viw):viw\is

vnoremap <silent> <Leader>is :<C-U>let old_reg_a=@a<CR>
 \:let old_reg=@"<CR>
 \gv"ay
 \:let @a=substitute(@a, '.\(.*\)\@=',
 \ '\=@a[strlen(submatch(1))]', 'g')<CR>
 \gvc<C-R>a<Esc>
 \:let @a=old_reg_a<CR>
 \:let @"=old_reg<CR>
Run Code Online (Sandbox Code Playgroud)

评论中有更多解决方案。