Zsh

是否有 LC_COLLATE 在破折號之前對點進行排序?

  • October 21, 2017

在我檢查過 ( C, en_US.UTF-8) 的語言環境中,點 (".") 排在破折號 ("-") 之後。當我cd和完成目錄說“som”時,則some-dir.git完成之前some.git。我還列出了我的項目的主題,並且文件zdharma-256.theme以前是全域的zdharma.theme。對我來說,一個自然的順序是首先完成較短的目錄。

有沒有LC_COLLATE我可以用來解決這個問題的?

也許這不是整理問題,而是在排序的第一遍忽略擴展的問題?是否有Zsh我可以使用的程式碼(通配標誌等)?

不,沒有這樣的整理,至少不是標準的。

以下是您自己檢查的方法:

  1. 首先準備一個文件(行Aaaa這裡只是為了測試目的)
cat >test <<\eof
Aa
aa
some.git
some-dir.git
eof
  1. sort使用系統上所有可能的排序規則執行命令:
for loc in $(locale -a); do
   echo "____${loc}____";
   LC_COLLATE="$loc" sort test;
done > test_sorted
  1. 現在test_sorted用你最喜歡的編輯器打開,看到不同的語言環境排序Aaaa不同,但他們都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/.

引用自:https://unix.stackexchange.com/questions/396781