VIM: 对Python多行import进行排序

4
有没有办法使用vim内置功能(按字母顺序)对多行导入进行排序?
例如:
import Fred
import Foo, Baz,\
     Bar, Spam, Eggs
import Python

Should become:

import Foo, Baz,\
     Bar, Spam, Eggs
import Fred
import Python

我已经查看了`:help sort`。特别是模式匹配接近我想要的,但它将导入的类单独留在排序块下面。

类似问题:https://dev59.com/TWgu5IYBdhLWcg3wK0Cr - pb2q
我认为当你开始想按字母顺序排序导入时,你可能已经在“优化代码”之路上走得太远了。 :) - Tshirtman
2个回答

5

Vim只能按行排序。因此,您可以:

  • \\\n替换为|
  • 进行排序
  • |替换为\\\n

试试这个:

:%s/\\\@<=\n/|
:sort
:%s/\\\@<=|/\r

注意:这里的\@<=\zs相同。


我明白了。所以你要做的就是用“|”标记所有换行符,同时将所有行连接起来。现在我可以进行排序了。第三行只需将所有的“标记”替换为之前的换行符?对我来说似乎足够好了 :) 干杯! - romanofski
虽然很丑,但这就是我今天使用的东西。也许...应该制作一个插件 :) - sehe

1

可能不完全相关,但这个问题是搜索 vim sort python imports 的前几个谷歌结果之一,所以我会在这里留下:

如果您不担心多行导入,但想处理 import xyzfrom xyz import xyz 两种形式,则以下命令将对您有所帮助:

:sort /[if][^ ]*/

这意味着“忽略与模式匹配的任何内容,并按照接下来的内容进行排序”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接