Zsh
是否有 LC_COLLATE 在破折號之前對點進行排序?
在我檢查過 (
C
,en_US.UTF-8
) 的語言環境中,點 (".") 排在破折號 ("-") 之後。當我cd
和完成目錄說“som”時,則some-dir.git
完成之前some.git
。我還列出了我的項目的主題,並且文件zdharma-256.theme
以前是全域的zdharma.theme
。對我來說,一個自然的順序是首先完成較短的目錄。有沒有
LC_COLLATE
我可以用來解決這個問題的?也許這不是整理問題,而是在排序的第一遍忽略擴展的問題?是否有
Zsh
我可以使用的程式碼(通配標誌等)?
不,沒有這樣的整理,至少不是標準的。
以下是您自己檢查的方法:
- 首先準備一個文件(行
Aa
,aa
這裡只是為了測試目的)cat >test <<\eof Aa aa some.git some-dir.git eof
sort
使用系統上所有可能的排序規則執行命令:for loc in $(locale -a); do echo "____${loc}____"; LC_COLLATE="$loc" sort test; done > test_sorted
- 現在
test_sorted
用你最喜歡的編輯器打開,看到不同的語言環境排序Aa
和aa
不同,但他們都some-dir.git
以前有some.git
. 換句話說pcregrep -M 'some.git\nsome' test_sorted
什麼都不給。
之所以
-
出現在前面,.
是源於 ascii 和 unicode 表(參見 參考資料man ascii
)。連字元(技術上稱為連字元減號)具有 45 十進制程式碼 (U+002D),而點是 46 (U+002E)。如果你足夠絕望,你可以編寫自己的語言環境,改變這種行為。最簡單的方法是修改目前文件之一,您可以在
/usr/share/i18n/locales/
.