如何在Vim中排序逗号分隔的单词

z0qdvdin  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(171)

在Python代码中,我经常遇到这样的import语句:

from foo import ppp, zzz, abc

有没有什么Vim技巧,比如:sort,可以排序成这样:

from foo import abc, ppp, zzz
9udxz4iz

9udxz4iz1#

是的,有:

%s/import\s*\zs.*/\=join(sort(split(submatch(0), '\s*,\s*')),', ')

关键要素包括:

  • :h :substitute
  • :h /\zs
  • :h s/\=
  • :h submatch()
  • :h sort()
  • :h join()
  • :h split()

要回答注解,如果要将替换应用于可视选择,它将变为:

'<,'>s/\%V.*\%V\@!/\=join(sort(split(submatch(0), '\s*,\s*')), ', ')

这次新增的关键要素是:

  • :h /\%V,表示下一个匹配的字符应属于可视选择
  • :h /\@!,我使用它来表示(与\%V结合)下一个字符属于可视选择。下一个字符不保留在匹配表达式中。

顺便说一句,我们也可以交互地使用si_CTRL-R_=,或者把它放在一个Map中(这里是在µ上触发的):

:xnoremap µ s<c-r>=join(sort(split(@", '\s*,\s*')), ', ')<cr><esc>
taor4pac

taor4pac2#

或者,您可以执行下列步骤:
1.将要排序的单词移到下一行:

from foo import 
ppp, zzz, abc

1.在单词列表的末尾添加逗号:

from foo import 
ppp, zzz, abc,

1.选择单词列表,例如与Shift-v.现在点击:然后输入!xargs -n1 | sort | xargs。它应该如下所示:

:'<,'>!xargs -n1 | sort | xargs

按Enter键。

from foo import 
abc, ppp, zzz,

1.现在删除结尾逗号并将单词列表合并回原始行(例如,使用Shift-j)。

from foo import abc, ppp, zzz

有一些Vim插件,可能对您有用:

1cosmwyk

1cosmwyk3#

我来到这里寻找一个快速的方法来排序逗号分隔的列表,一般来说,e.g.

relationships = {
        'project', 'freelancer', 'task', 'managers', 'team'
    }

我的习惯是用换行符搜索/替换空格,并调用shell排序,但这是一个痛苦的过程。
最后我找到了Chris Toomey的sort-motion插件,它就是一张入场券:https://github.com/christoomey/vim-sort-motion.强烈推荐。

1szpjjfi

1szpjjfi4#

为什么不试试vim-isort?
我使用和vim-yapf-format来美化代码:)https://github.com/pignacio/vim-yapf-format

icnyk63a

icnyk63a5#

在可视模式下选择逗号分隔的文本:,然后运行以下命令:

'<,'>!tr ',' '\n' | sort -f | paste -sd ','

🎩- 提示此注解

相关问题