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

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


还有更优雅的解决方案还是应该坚持我提出的解决方案?

评论

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

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

跳过“。”在拆分部分。

@SatoKatsura实际上,我认为它效率更高,因为regexp引擎不需要匹配任何东西。此外,这是文档中的首选方法。

@ChristianBrabandt根据手册,没有{keepempty}选项的split()应该在开头删除一个空项目,在结尾删除一个空项目。当前,它会删除所有空项目,包括列表中间的项目(如果您问我,它比记录的行为更有用,但可能不是)。我认为最近在vim_dev上对此进行了讨论。

#1 楼

您的解决方案非常优雅!如果您使用的是基于Unix的环境,则可以选择:

!!rev


#2 楼

来自Wikia

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


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

#3 楼

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