如何使用Vim脚本反转字符串


11

我正在尝试反转一个字符串,所以'abc defg hij'变成'jih gfed cba'。我想出的解决方案是

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

是否有更优雅的解决方案,还是我应该坚持自己提出的建议?


1
这取决于您所说的“优雅”。如果您要的是,则没有专用于反转字符串的内部函数。如果您打算通过两次或更多次调用内部函数而没有其他语句来执行此操作,那么这似乎也是不可能的。
佐藤桂2015年

1
您当前的解决方案既优雅惯用。
romainl

1
跳过“。” 在拆分部分。
克里斯蒂安·布拉班德

1
@SatoKatsura实际上,我认为它效率更高,因为regexp引擎不需要匹配任何东西。此外,这是文档中的首选方法。
克里斯蒂安·布拉班德

1
@ChristianBrabandt根据手册,split()如果没有该{keepempty}选项,则应在开始时删除单个空白项,并在末尾删除单个空白项。当前,它将删除所有空项目,包括列表中间的项目(如果您问我,它比记录的行为更有用,但可能不是)。我认为最近已经对此进行了讨论vim_dev
佐藤桂2015年

Answers:


10

您的解决方案非常优雅!如果您在基于Unix的环境中,则可以选择以下方法:

!!rev

3

来自Wikia

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

有关更多信息,请参见: :h revins


2

如果您使用的是类unix的系统,请在vim中键入ex-command :%! rev

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.