在Python代码中,我经常遇到像这样的import语句:
from foo import ppp, zzz, abc
是否有任何Vim技巧,如行的:sort
,可以对此进行排序:
from foo import abc, ppp, zzz
答案 0 :(得分:10)
是的,有:
%s/import\s*\zs.*/\=join(sort(split(submatch(0), '\s*,\s*')),', ')
关键要素是:
要回答评论,如果要在视觉选择上应用替换,它将变为:
'<,'>s/\%V.*\%V\@!/\=join(sort(split(submatch(0), '\s*,\s*')), ', ')
这次是新的关键要素:
顺便说一句,我们也可以交互使用s
和i_CTRL-R_=
,或者将其放在映射中(此处在µ
上触发):
:xnoremap µ s<c-r>=join(sort(split(@", '\s*,\s*')), ', ')<cr><esc>
答案 1 :(得分:2)
或者,您可以执行以下步骤:
将要排序的单词移动到下一行:
from foo import ppp, zzz, abc
在单词列表的末尾添加逗号:
from foo import ppp, zzz, abc,
例如,使用 Shift - v 选择单词列表。现在点击:然后输入!xargs -n1 | sort | xargs
。它应该是这样的:
:'<,'>!xargs -n1 | sort | xargs
点击输入。
from foo import abc, ppp, zzz,
现在删除尾随逗号并将单词列表合并回原始行(例如,使用 Shift - j )。
from foo import abc, ppp, zzz
有些Vim插件可能对您有用:
答案 2 :(得分:2)
我来到这里寻找一种快速的方法来对逗号分隔的列表进行排序,例如。
relationships = {
'project', 'freelancer', 'task', 'managers', 'team'
}
我的习惯是用换行符搜索/替换空格并调用shell排序,但这很痛苦。
我最终找到了Chris Toomey的sort-motion
插件,这只是一张票:https://github.com/christoomey/vim-sort-motion。强烈推荐。
答案 3 :(得分:1)
为什么不试试vim-isort? https://github.com/fisadev/vim-isort
我使用它和vim-yapf格式来美化代码:) https://github.com/pignacio/vim-yapf-format