我知道如何在Sublime中对行进行排序(ctrl+p“排序”)。问题是它没有按照我想要的方式对一些字符进行排序。
有什么方法可以改变sublime对文本的排序方式吗?也许是通过特定的语言环境?能够将V和W排序为相等也是一件有趣的事情。
示例:我希望以下单词按此顺序排序:
bår
bär
bör但Sublime是这样排序的:
bär
bår
bör发布于 2017-02-06 20:32:13
在ST的问题跟踪器上也记录了类似的请求:https://github.com/SublimeTextIssues/Core/issues/1324
其中一个ST开发人员回答说:
Python3中的
排序使用Unicode代码点作为排序的基础。Sublime Text不知道您的编码代表什么语言,因此它不使用基于区域设置的排序规则。
这似乎最好的解决办法是使用一个专门提供基于区域设置的排序规则的包。
使用https://packagecontrol.io/packages/PackageResourceViewer,我们可以看到Packages/Default/sort.py中的case_sensitive_sort方法使用了Python的内置list.sort方法。在ST的Python控制台(视图菜单->显示控制台)中键入以下内容,我们将得到与您所示相同的结果:
>>> a = ['bår', 'bär', 'bör']
>>> a.sort()
>>> a
['bär', 'bår', 'bör']因此,答案是没有设置来配置排序行为,将来也不太可能。但是,根据https://docs.python.org/3/howto/sorting.html#odd-and-ends的说法,可以使用locale.strxfrm作为关键函数来使用地区感知排序。
让我们试一试。在Windows上,我必须使用
>>> import locale
>>> locale.setlocale(locale.LC_COLLATE, 'sve')
'Swedish_Sweden.1252'让Python使用瑞典语语言环境-按照https://stackoverflow.com/a/956084/4473405
>>> a.sort(key=locale.strxfrm)
>>> a
['bår', 'bär', 'bör']利用这些知识,您可以选择更改case_sensitive_sort方法,以便ST的内置排序功能(编辑菜单->排序行(区分大小写))将使用区域设置感知的排序关键字。请注意,保存从PackageResourceViewer打开的sort.py文件将创建覆盖,因此,如果将来的ST构建包含对sort.py的更改,您将无法看到它们,直到您删除覆盖(您可以通过使用Preferences菜单-> Browse Packages -> Default找到该文件来执行此操作。如果合适,您可以在以后使用完全相同的步骤重新应用您的更改。)
您还可以将case_insensitive_sort方法从
txt.sort(key=lambda x: x.lower())至
txt.sort(key=lambda x: locale.strxfrm(x.lower()))请注意,如果没有自动获取正确的语言环境(可能缺省为C),则使用then setting the locale in this (case_sensitive_sort) method isn't recommended, even if, immediately afterwards, you restore it back to what it was beforehand - so use at your own risk。
在一些库例程中调用
setlocale()通常不是一个好主意,因为它会影响整个程序。保存和恢复它几乎同样糟糕:它很昂贵,并且会影响在恢复设置之前碰巧运行的其他线程。
您可以将以下内容添加到sort.py文件的末尾:
def plugin_loaded():
import locale
locale.setlocale(locale.LC_COLLATE, '')在加载插件时,它将允许Python根据https://docs.python.org/3/library/locale.html#locale.setlocale从您的LANG环境变量中推断区域设置。优点是你只需要设置它一次,并且希望不会在同时执行的其他插件代码中引入任何问题。
祝你排序愉快!
https://stackoverflow.com/questions/42053753
复制相似问题