名稱

wcd - 隨處切換目錄

適用於 DOS 與 Unix 的目錄切換工具

語法

wcd [options] [directory]

說明

概觀

wcd 是一支命令列程式,可快速切換目錄,能省下在鍵盤上敲字的時間。您只需輸入目錄名稱的一部分,wcd 就會跳到該目錄。當有多個符合項時,wcd 提供快速的選擇方式,並支援為目錄設定別名與封鎖。wcd 另附有全螢幕互動式目錄樹瀏覽器,內建快速搜尋功能。

wcd 的設計源自 Norton Change Directory (NCD)。NCD 最早出現在 Peter Norton 於 1987 年為 DOS 出版的 The Norton Utilities, Release 4。

wcd 已移植到多種命令列 shell:DOS 的 command.com、Windows 的 cmd.exe 與 PowerShell、OS/2 的 cmd.exe,以及 Bourne (sh)、Bourne Again (bash)、Korn (ksh)、Z (zsh)、C (csh) 等 Unix shell,還有其他可執行於任何作業系統的 shell。

wcd 在所有系統上均支援 8 位元字元集,並可選擇性支援 Unicode。請參見「在地化」一節。

請參見「安裝」一節,了解如何設定 wcd 以供個人使用。

基本用法

預設情況下(未使用萬用字元時),wcd 會搜尋名稱以輸入內容開頭的目錄。

例如,下列命令會切換到目前使用者的 /home/user/Desktop:

wcd Desk

若有多個符合項,wcd 會列出所有符合項供您挑選,您只需敲幾個鍵(通常只是一個)即可完成選擇。

萬用字元

wcd 支援下列萬用字元:

*       比對任意字元序列(零個以上)
?       比對任一字元
[SET]   比對指定集合中的任一字元
[!SET]  或 [^SET] 比對指定集合以外的任一字元。

集合是由字元或範圍組成;範圍的寫法為 字元連字符元,例如 0-9 或 A-Z。[0-9a-zA-Z_] 是 [..] 模式結構中所允許的最小字元集合。若系統支援,也可使用國際字元(即 8 位元字元)。若要取消 []*?!^-\ 中任一字元在 [..] 結構內或結構外的特殊語法意義,使其確實以該字元比對,請在該字元前加上反斜線 (\) 標記。

使用萬用字元可以進行強大的搜尋。例如,下列命令會比對任何以「top」結尾的目錄名稱:

wcd *top

比對名稱中任何位置含有「top」的目錄:

wcd *top*

比對任何以「a」、「b」或「c」開頭的目錄名稱:

wcd [a-c]*

也可以只輸入目錄路徑的一部分。此時 wcd 會搜尋以「Desk」開頭,且路徑符合 *me/Desk* 的目錄。

wcd me/Desk

可以輸入任何含有斜線與萬用字元的運算式。例如:

wcd src*/*1?/a*2

其他用途

若未使用萬用字元且 wcd 找到完全符合的目錄,預設會忽略所有萬用字元符合項。這個行為可以用 -w 選項變更。

使用 -g 選項可以啟動互動式目錄樹瀏覽器。

wcd -g

wcd 會產生一個 treedata 檔案,用來搜尋目錄。在 Unix 與 Windows 系統上,wcd 在掃描磁碟時會把符號連結加入 treedata 檔案,但不會跟隨它們。若跟隨連結,wcd 可能會陷入無限迴圈,或掃描掉極大範圍的網路。

wcd 也可以切換到不在 treedata 檔案中的目錄。例如:

wcd ..

若 wcd 找到符合項卻無法切換到該目錄,它會嘗試將該目錄從預設 treedata 檔案中移除,但不會從額外 treedata 檔案中移除。請另參見 -k 選項。

wcd 會維護一個存放在磁碟上的目錄堆疊。堆疊的預設大小為 10,且為循環式的。請參見 -z、-、+ 與 = 選項。

在多人使用的環境中,可以使用 -u 選項切換到其他使用者的目錄。

在 DOS 與 Windows 系統上,不論使用斜線「/」或反斜線「\」作為目錄分隔符都沒有問題。

在 DOS 與 Windows 系統上,可以在目錄名稱前加上磁碟機名稱,一次同時切換磁碟機與目錄。

wcd d:games

Windows UNC 路徑

Windows 版本(命令提示字元、PowerShell、MSYS、zsh、cygwin)支援不帶磁碟機代號的 Windows SMB 區域網路 UNC 路徑,例如 \\servername\sharename。Windows 命令提示字元版的 wcd 會利用「pushd」命令自動將 UNC 路徑對應到磁碟機代號。在 Windows PowerShell、MSYS、zsh 與 Cygwin 中,UNC 路徑同樣受到完整支援。目前的工作目錄可以是 UNC 路徑。

Windows 主控台縮放

wcd 自 6.0.3 版起支援 Windows 10 主控台與 ConEmu(見 https://conemu.github.io/)的主控台縮放。Windows 10 主控台必須未使用相容模式(請檢查主控台屬性)。若主控台版面配置屬性「Wrap text output on resize」已停用,畫面可能不會重新整理。可以按 F5 鍵手動重新整理畫面。

介面

wcd 有三種不同的介面,可用來從符合項清單中挑選。介面可在編譯時選擇。

第一種介面使用單純的 stdin/stdout。程式會在終端機中印出附編號的清單,您必須輸入數字再按 <Enter> 才能選擇。當清單很長時,此介面不提供捲動回顧功能,必須使用終端機/主控台本身的捲動回顧功能。此介面非常輕量且可攜性高。

第二種介面以 conio 程式庫建置,內建捲動回顧功能。使用者看到的是以字母編號的清單,只要按一個字母就能完成選擇。此介面因為省下按鍵而速度很快。若可能,離開時會還原畫面。喜歡輸入數字者可以使用 -N 選項。

第三種介面以 curses 程式庫建置,與 conio 介面相似。curses 版的 wcd 另外還有一個「圖形」介面,可讓您透過全螢幕互動式目錄樹瀏覽器選取目錄,導覽與搜尋方式類似 vim(1),可用 -g 選項啟用。

使用 -o 選項隨時都可以退回 stdin/stdout 介面。

選項

-a

將目前路徑加入預設 treedata 檔案。

使用此選項可快速將目前路徑加入預設 treedata 檔案。在某些情況下,重新掃描整顆磁碟會花費很長的時間。

-aa

將目前路徑及其所有父層路徑加入預設 treedata 檔案。

-A PATH

自 PATH 掃描目錄樹,並附加到預設 treedata 檔案。範例:

wcd -A .
wcd -A /home -A /etc
wcd -A d: -A e: -A \\server\share

在 Windows 上,可以輸入類似 wcd -A \\servername 的命令,掃描 Windows 區域網路伺服器的所有共享目錄。

請另參見 -S、-s 與 -E 選項。

-b

封鎖目前路徑。

wcd 會將目前路徑放進封鎖檔案。這表示 wcd 會忽略此目錄及其子目錄的所有符合項。

封鎖檔案可以用文字編輯器編輯,支援使用萬用字元,名稱會比對絕對路徑。

被封鎖的路徑並不會在掃描磁碟時被排除。若要排除,請使用 -xf 選項。

-c, --direct-cd

直接切換目錄模式。預設情況下 wcd 的運作順序如下:

1. 先在 treedata 檔案中尋找符合項
2. 若沒有符合項,則嘗試開啟您輸入的目錄。

在直接切換目錄模式中,wcd 的運作順序相反。

1. 先嘗試開啟您輸入的目錄。
2. 若開啟失敗,則在 treedata 檔案中尋找符合項。
-d DRIVE

設定堆疊與 go 檔案所在的磁碟機(僅 DOS)。

若未設定環境變數 HOME,堆疊檔案與 go 腳本預設會存放在磁碟機 C:。若磁碟機 C: 是唯讀磁碟,請使用此選項。此選項必須用在堆疊選項 -、+ 與 = 之前。

-e

將目前路徑加入額外 treedata 檔案。

使用此選項可快速將目前路徑加入額外 treedata 檔案。

-ee

將目前路徑及其所有父層路徑加入額外 treedata 檔案。

-E PATH

自 PATH 掃描目錄樹,並附加到額外 treedata 檔案。請另參見 -A 與 -S 選項。

-f FILE

讀取 treedata 檔案 FILE,不讀取預設 treedata 檔案。

+f FILE

除了預設 treedata 檔案之外,也讀取 treedata 檔案 FILE。

-g

圖形介面(僅限具備 curses 介面的版本)。

wcd 會啟動以 curses 為基礎的文字「圖形」介面。使用者可以透過全螢幕互動式目錄樹瀏覽器選取目錄,導覽與搜尋方式類似 vim(1)。

若未提供搜尋字串,wcd 會顯示預設 treedata 檔案與額外 treedata 檔案中的整棵目錄樹。

若提供搜尋字串,符合項清單會以目錄樹的形式呈現。

預設的目錄樹版面配置類似 DOS 上原始 NCD 的版面配置。兩者的差異在於,NCD 中所有相同深度的目錄都會在整棵樹中垂直對齊。NCD 能夠如此,是因為 DOS 上目錄名稱的最大寬度只有 12 (8.3) 個字元。在現代作業系統上,目錄名稱可能非常長,長度差異也就很大。因此在 wcd 中,相同深度的資料夾不會在整棵樹中垂直對齊,而只會在子分支中對齊。當您在子分支之間直線上下移動時,就會有一些水平位移。

wcd 的導覽行為與原始 NCD 完全相同。例如按下 Down 鍵時,會往下跳到相同深度的下一個目錄,越過分支。這能讓您在樹中快速導覽。

請參見 -Ta、-TC 與 -Tc 選項以變更導覽行為。

-gd

將 treedata 檔案以目錄樹形式傾印至 stdout。

-G PATH

在目錄 PATH 中寫入 go 腳本。例如在 Unix 上,wcd -G PATH 會寫出 go 腳本 PATH/wcd.go。

-GN, --no-go-script

不要建立 go 腳本。若不想讓 wcd 建立 go 腳本,此選項可與 -j 選項搭配使用。

-h, --help

顯示說明後結束。

-i, --ignore-case

忽略大小寫。DOS 與 Windows 版的 wcd 預設忽略大小寫,Unix/Cygwin 版則預設區分大小寫。

+i, --no-ignore-case

區分大小寫。請另參見 -i 選項。

-I, --ignore-diacritics

對以拉丁字母為主的文字忽略變音符號。帶有變音符號的字母會比對到未加變音符號的基本字母。支援下列拉丁編碼:CP437、CP850、CP852、CP1250、CP1252、ISO-8859-1、ISO-8859-2,以及 Unicode Latin-1、Latin Extended-A 與 Latin Extended-B。請另參閱 https://en.wikipedia.org/wiki/Diacritic

+I, --no-ignore-diacritics

區分變音符號(預設)。請另參見 -I 選項。

-j, --just-go

僅切換模式。

在此模式下,若有多個目錄符合指定的目錄,wcd 不會列出清單,而是直接切換到第一個選項。當 wcd 以相同引數再次執行時,會切換到下一個選項,依此類推。

wcd 會把要切換到的目錄印到 stdout,因此可以採用不同的安裝方式。例如可以為相容於 POSIX 的 shell 定義下列函式:

wcd ()
{
    cd "$($HOME/bin/wcd.exe -j $@)"
}

若您使用不支援「$()」命令替換的舊版 shell,必須改用反引號的舊式命令替換語法。

wcd ()
{
    cd "`$HOME/bin/wcd.exe -j $@`"
}

在 Windows 系統上,若您使用 4NT shell,可以定義下列別名:

alias wcd `cd %@execstr[wcdwin32.exe -z 0 -j %1]`

這種方法免去 go 腳本,因此可以將 -GN 與 -j 選項搭配使用。

-k, --keep-paths

保留路徑。

當 wcd 無法切換到某些路徑時,仍將它們保留在 treedata 檔案中。wcd 的預設行為是無法切換時就嘗試把路徑從 treedata 中移除,使用此選項即可關閉該行為。

-K, --color

在圖形模式中使用色彩。

-l ALIAS

以 ALIAS 為目前路徑命名。wcd 會把目前路徑以別名 ALIAS 放進別名檔案。別名區分大小寫。

-ls

顯示別名檔案的名稱,並列出所有別名。

-m DIR

建立目錄並加入 treedata 檔案。

-L, --license

印出散布授權條款。

-M DIR

建立目錄並加入額外 treedata 檔案。

-n PATH

自 PATH 讀取相對 treedata 檔案。

不讀取預設 treedata 檔案。相對 treedata 檔案應該已經使用 wcd 的 +S 選項建立。PATH 也可以直接指向檔案。

舉例來說,假設另一個系統已掛載到掛載點 /mnt/network:

wcd -n /mnt/network src

wcd 會開啟 /mnt/network/ 中的相對 treedata 檔案。該檔案包含從該位置算起的相對路徑。

+n PATH

除了預設 treedata 檔案之外,也讀取相對 treedata 檔案。請參見 -n 選項。

-N, --numbers

使用數字而非字母。

具備 conio 或 curses 介面的 wcd(見「介面」一節)預設以字母編號呈現符合項清單。使用 -N 選項時,符合項清單會改以數字編號。無論是否使用 -N,您都可以輸入字母或數字來從符合項清單中做選擇。

-o

使用 stdin/stdout 介面。

當 wcd 的 conio 或 curses 介面因故無法運作時,可以使用 -o 選項退回 stdin/stdout 介面。

-od, --to-stdout

將所有符合項傾印至 stdout。

-q, --quiet

減少輸出訊息,並抑制最終符合項的印出。

-r DIR

移除目錄,並從 treedata 檔案中移除。

若目錄是空的,wcd 會將它移除,並嘗試從 treedata 檔案中移除。

-rmtree DIR

遞迴移除目錄,並從 treedata 檔案中移除。

wcd 會移除該目錄及其所有子目錄與檔案,並把這些目錄從 treedata 檔案中移除。

-s

自 $HOME 目錄(重新)掃描磁碟。若未定義 HOME,則自根目錄 / 掃描磁碟。

既有的預設 treedata 檔案會被覆寫。

預設的掃描目錄可以用環境變數 WCDSCAN 變更。請參見「環境變數」一節。

-S PATH

自 PATH 掃描目錄樹,並覆寫預設 treedata 檔案。請另參見 -A、-s 與 -E 選項。例如可以用 -A 選項建立自選的預設 treedata 檔案。範例:

Unix:

wcd -S /
wcd -S /home -A /etc -A /usr

DOS/Windows:

wcd -S c:/
wcd -S c: -A d: -A \\server\share

Windows 版本可以輸入類似 wcd -S \\servername 的命令,掃描 Windows 區域網路伺服器的所有共享目錄。

+S PATH

自 PATH 掃描磁碟,並把相對路徑寫入相對 treedata 檔案。這個檔案供 wcd 的 -n 與 +n 選項使用。例如 wcd -n PATH src。

-t

不要從比對結果中剝除暫存掛載目錄 /tmp_mnt(僅 Unix)

wcd 預設會從比對結果中剝除 /tmp_mnt/。目錄 /tmp_mnt 是自動掛載程式所使用的目錄。可用 -t 選項關閉此行為。

-T, --ascii-tree

以 ASCII 字元繪製目錄樹。若終端機無法正確顯示線條繪圖字元,請使用此選項。

-Ta, --alt-tree-nav

圖形目錄樹中的替代導覽方式。

在預設的 NCD 風格目錄樹版面配置中,-Ta 選項會停用跳往無關目錄的功能。

在精簡目錄樹模式中,替代模式讓導覽方式類似 Windows Explorer 或 Linux KDE Konqueror 等 GUI 檔案管理員。按下 Up 與 Down 會讓選取的資料夾上下移動一列。按下 Left 第一次會摺疊子資料夾,再向左移動一次才會真正向左移。

您可以按 <Shift-A> 即時在預設與替代導覽方式之間切換。

替代導覽模式開啟時,右下角會顯示一個「A」。

-TC, --center-tree

圖形目錄樹中的置中檢視。選取的目錄會留在畫面中央。在圖形目錄樹中也可以用 <t> 鍵開關置中模式。

可將目錄樹移動量降到最低的標準非置中行為,與原始 NCD 相同。

-Tc, --compact-tree

預設情況下,「圖形」目錄樹的繪製方式與 DOS 上原始 NCD 相同。在 DOS 上,目錄路徑總長最多只有 66 個字元。以現今深層的目錄結構而言,目錄樹可能變得非常寬。為克服此問題,wcd 可以用類似多數 GUI 檔案管理員的精簡方式繪製目錄樹,每列只有一個資料夾。請使用 -Tc 選項,或按 <m> 鍵即時切換。

-Td, --cjk-width

舊式東亞 CJK(中日韓)字型有些字元與線條繪圖符號的欄寬為 2,而這些字元在一般 Unicode 下的寬度是 1 欄。例如 Windows 上的中文 CP936 點陣字型與 Simsun 字型。當使用舊式 CJK 字型時,請用此選項才能正確描繪圖形目錄樹的輪廓。

CJK 模式開啟時,右下角會顯示一個「C」。

-u USER

依 USER 掃描其他使用者的 treedata 檔案,不掃描您自己的預設 treedata 檔案。WCDUSERSHOME 的說明請參見「環境變數」一節。

在 Unix/Cygwin 上,使用者家目錄的基底目錄假定為 /home。wcd 會依序尋找 /home/USER/.treedata.wcd 與 /home/USER/.wcd/.treedata.wcd,並讀取第一個存在且可讀取的檔案。在 DOS/Windows 上,使用者家目錄的基底目錄假定為 \\users,因此 wcd 會嘗試讀取 \\users\USER\treedata.wcd 與 \\users\USER\.wcd\treedata.wcd。

+u USER

除了您自己的 treedata 檔案之外,也讀取 USER 的預設 treedata 檔案。

-v, --verbose

顯示詳細訊息。使用此選項時,wcd 會印出所有過濾條件、封鎖與排除設定。

-V, --version

印出版本資訊後結束。

-w, --wild-match-only

僅使用萬用字元比對,將所有符合項都視為萬用字元符合項。

-x PATH

掃描時排除 PATH。

使用此選項時,wcd 在掃描磁碟時會排除 PATH 及其所有子目錄。支援萬用字元,並比對絕對路徑。-x 選項可以多次使用。

wcd -x <path1> -x <path2> -s

-x 選項必須用在任何掃描選項 (-s、-S、+S、-A、-E) 之前。

在 DOS/Windows 系統上,是否需要指定磁碟機代號,取決於環境變數 HOME 或 WCDHOME 是否有設定。若 HOME 或 WCDHOME 有設定,就需要指定磁碟機代號。範例:

wcd -x c:/temp -S c:

否則不要指定磁碟機代號。

wcd -x /temp -s
-xf FILE

掃描時排除 FILE 中列出的所有路徑。

使用此選項時,wcd 在掃描磁碟時會排除 FILE 中列出的所有路徑及其所有子目錄。支援萬用字元,並比對絕對路徑,每列一個路徑。請注意,由於列首與列尾的空白也是合法的目錄名稱字元,wcd 不會忽略它們。-xf 選項可以多次使用。若想將所有被封鎖的路徑都排除於掃描之外,可以像下面這樣做(以 Unix 上的 wcd 為例):

wcd -xf ~/.ban.wcd -s

支援萬用字元。例如要排除所有含有管理檔案的 Subversion 目錄,加入一列 */.svn。

-xf 選項必須用在任何掃描選項 (-s、-S、+S、-A、-E) 之前。

-y, --assume-yes

對所有詢問一律回答是。

wcd 不會以 yes/no 詢問使用者,而是視為使用者對所有問題都回答「是」。這個選項可與 -rmtree 選項搭配使用,並且必須用在可能產生 yes/no 詢問的選項之前。

-z NUMBER

將堆疊大小上限設為 NUMBER。

堆疊的預設大小為 10。將大小設為 0 可以關閉堆疊功能。此選項必須用在其他任何堆疊操作(-、+、=) 之前,否則堆疊大小會被改回預設值 10。

正確的命令如下:

wcd -z 50 -

新的堆疊大小會是 50,wcd 會往回切換一個目錄。錯誤的命令如下:

wcd - -z 50

wcd 會往回切換一個目錄,堆疊大小則是預設值 10,-z 50 會被忽略。

請把這個選項加在 wcd 別名或函式的第一個選項。例如對相容於 POSIX 的 shell:

wcd ()
{
    wcd.exe -z 50 "$@"
    . ${WCDHOME:-${HOME}}/bin/wcd.go
}
-[NUMBER]

將目錄推入堆疊 NUMBER 次。預設為一次。

往回切換一個目錄。命令 wcd - 會往回切換一個目錄。若要往回切換更多目錄,請加上數字,例如命令 wcd -3。堆疊是循環式的。

+[NUMBER]

將目錄彈出堆疊 NUMBER 次。預設為一次。

往前切換一個目錄。命令 wcd + 會往前切換一個目錄。若要往前切換更多目錄,請加上數字,例如命令 wcd +2。堆疊是循環式的。

=

顯示堆疊。

若您已不記得推入或彈出過幾次,可以使用此選項。程式會印出堆疊供您挑選一個數字,目前在堆疊中的位置會以星號 * 標示。

安裝

Unix shell 目前的工作目錄只能用內建的 cd(1) 命令變更,因此這支程式一律由函式或別名呼叫。該函式或別名會 source 一個由 wcd 程式產生的 shell 腳本(go 腳本)。只有在定義好該函式或別名之後,wcd 才能運作。

另一個對安裝影響很大的因素是環境變數 HOME 與 WCDHOME 的定義。請參見「環境變數」一節。

安裝(POSIX 類 shell)

若 wcd 是以套件管理器安裝的,wcd 函式可能已放在 /etc/profile.d 並自動被 source,這種情況下就不需要自行定義函式。

若要在 Unix、Linux、Cygwin 或原生 MSYS 上供 POSIX shell (ksh、bash、zsh 等) 使用,請把下列函式加入 shell 的啟動檔(例如 Bash 使用 $HOME/.bashrc):

wcd ()
{
    typeset go="${WCDHOME:-${HOME}}/bin/wcd.go"
    rm -f "$go" 2> /dev/null
    PATH/wcd.exe "$@"
    [ -f "$go" ] && . "$go"
}

請把 PATH 換成 wcd 執行檔的安裝位置。重新載入 shell 的初始化檔,或啟動新的 shell。

go 腳本 wcd.go 的位置會因 shell 而異。

DJGPP DOS bash 與 OS/2 bash 版的 wcd 需要使用不同的函式。go 腳本不會寫在 bin 目錄中,而且若 WCDHOME 與 HOME 都未定義,go 腳本會寫在 c:/。

DOS bash:

wcd ()
{
    PATH/wcdbash.exe "$@"
    . ${WCDHOME:-${HOME:-"c:"}}/wcd.go
}

OS/2 bash:

wcd ()
{
    PATH/wcdos2bash.exe "$@"
    . ${WCDHOME:-${HOME:-"c:"}}/wcd.go
}

WinZsh 版的 wcd 需要使用稍有不同的函式。go 腳本永遠不會寫在 c:/。

wcd ()
{
    PATH/wcdwin32zsh.exe "$@"
    . ${WCDHOME:-${HOME}}/wcd.go
}

更多資訊請參見「檔案」一節。

安裝(C 類 shell:csh、tcsh)

請把下列別名加入 shell 啟動檔 $HOME/.cshrc 或 $HOME/.tcshrc:

if ( ${?WCDHOME} ) then
    alias wcd "PATH/wcd.exe \!* ; source $WCDHOME/bin/wcd.go"
else
    alias wcd "PATH/wcd.exe \!* ; source $HOME/bin/wcd.go"
endif

請把 PATH 換成 wcd 執行檔的安裝位置。重新載入 shell 的初始化檔,或啟動新的 shell。

Windows 命令提示字元版本

解壓縮 zip 檔,並把 bin 目錄加入環境變數 PATH。

在 Windows 命令提示字元中,Windows 程式無法變更目前的工作目錄,但 .bat 檔可以。批次腳本 wcd.bat 會執行 wcd 程式,產生新的批次腳本 wcdgo.bat,接著 wcd.bat 執行 wcdgo.bat,實際切換目錄。

Windows VISTA 以上版本

在 Windows VISTA 以上版本的命令提示字元中,您可能只能存取部分目錄。若要存取更多目錄,需要系統管理員權限。在命令提示字元圖示上按右鍵並選擇 Run as administrator,即可取得具備系統管理員權限的命令提示字元。

Windows PowerShell 版本

請把下列函式加入您的 PowerShell 使用者設定檔。這個設定檔的位置存放在 $profile 變數中。必須先定義環境變數 HOME 或 WCDHOME 其中之一。

function wcd
{
    PATH\wcdwin32psh.exe $args
    & $env:HOME\wcdgo.ps1
}

請把 PATH 換成 wcd 執行檔的安裝位置,然後啟動新的 PowerShell。PowerShell 版的 wcd 只支援檔案系統提供者,不支援其他提供者。

OS/2 命令提示字元版本

在 OS/2 命令提示字元 (cmd.exe) 中,OS/2 程式無法變更目前的工作目錄。因此 wcd 會產生一份必須在目前 shell 中執行的命令腳本 wcdgo.cmd。腳本 wcd.cmd 會先執行 wcdos2.exe 來產生 wcdgo.cmd,再由 wcd.cmd 執行 wcdgo.cmd。

在地化

LANG

主要語言以環境變數 LANG 選擇。LANG 變數由數個部分組成。第一部分是以小寫字母書寫的語言代碼。第二部分是選用的國家代碼,以大寫字母書寫並加上底線前導。另有選用的第三部分:字元編碼,前面加上小數點。以下是幾個 POSIX 標準類 shell 的範例:

export LANG=nl               Dutch
export LANG=nl_NL            Dutch, The Netherlands
export LANG=nl_BE            Dutch, Belgium
export LANG=es_ES            Spanish, Spain
export LANG=es_MX            Spanish, Mexico
export LANG=en_US.iso88591   English, USA, Latin-1 encoding

完整的語言代碼與國家代碼清單請參閱 gettext(1) 手冊:https://www.gnu.org/software/gettext/manual/gettext.html#Language-Codes。在 Unix 系統上,您也可以使用 locale(1) 命令取得各地區設定的相關資訊。

LANGUAGE

您可以用 LANGUAGE 環境變數指定一份以冒號分隔的語言優先順序清單。wcd 的 LANGUAGE 優先權高於 LANG。例如先荷蘭文再德文:LANGUAGE=nl:de。在使用 LANGUAGE 變數的語言優先順序清單之前,必須先將 LANG 或 LC_ALL 設為 C 以外的值以啟用在地化。請另參閱 gettext(1) 手冊:https://www.gnu.org/software/gettext/manual/gettext.html#The-LANGUAGE-variable

若選擇了沒有提供翻譯的語言,您會看到標準的英文訊息。

WCDLOCALEDIR

透過環境變數 WCDLOCALEDIR 可以覆寫 wcd 編譯與安裝時所使用的 LOCALEDIR。具備原生語言支援的 wcd 會用 LOCALEDIR 來尋找語言檔。GNU 的預設值是 /usr/local/share/locale。輸入 wcd -V 可讓 wcd 印出實際使用的 LOCALEDIR。

若您把 wcd 安裝在與預設目錄不同的位置,可能需要設定環境變數 WCDLOCALEDIR 指向 locale 目錄。

Windows cmd 的範例:

set WCDLOCALEDIR=c:/my_prefix/share/locale

POSIX shell 的範例:

export WCDLOCALEDIR=$HOME/share/locale
LC_COLLATE

當有多個目錄符合時,wcd 會呈現排序後的清單,排序方式取決於地區設定。若已設定環境變數 LANG,符合項就會像該語言的字典或電話簿那樣排序。例如點號與連字號會被忽略,或帶有變音符號與不帶變音符號的字母視為相同,或不分大小寫。

排序時,環境變數 LC_COLLATE 的優先權高於 LANG。若把 LC_COLLATE 設為 C 或 POSIX,就會關閉依地區設定排序。例如想要荷蘭文但不要荷蘭文排序,可以像下面這樣設定:

export LANG=nl_NL
export LC_COLLATE=C
LC_CTYPE

字元編碼方面,wcd 會優先採用變數 LC_CTYPE 而非 LANG。例如要將字元編碼設為 UTF-8,可以做以下設定。

export LC_CTYPE=en_US.UTF-8
LC_ALL

若已定義環境變數 LC_ALL,所有以 LC_ 開頭的地區設定環境變數都會被它覆寫。wcd 採用 LC_ALL 的優先權高於 LC_COLLATE 與 LC_CTYPE。

WINDOWS 碼頁

碼頁分成兩組:DOS 碼頁 (OEM) 與 Windows 碼頁 (ANSI)。Windows 在設定為西歐地區設定時,預設編碼是 ANSI CP1252。Windows 程式(例如記事本)會使用這個預設的系統 ANSI 碼頁。Windows 主控台為了與 DOS 程式相容,預設使用 OEM 碼頁(CP437 或 CP850)。若您在 Windows 主控台中使用 DOS 版的 wcd,因為有 DOS 碼頁的關係可以正常運作,但 DOS 版的 wcd 不支援 Windows 上的長檔名與網路磁碟機。

Windows 版的 wcd 是原生 Windows 程式,會使用 Windows 系統 ANSI 碼頁,因此在西歐地區設定的 Windows 上,檔名與訊息會使用 CP1252 碼頁。為了讓輸出不受作用中碼頁影響而保持一致,所有 Windows 版的 wcd 都會在命令提示字元與 PowerShell 中把 ANSI 輸出轉換為 Unicode 輸出。

主控台的點陣字型只支援 Windows 隨附的原始 OEM 碼頁,因此必須把主控台字型改成 True Type 的 Lucida Console,Unicode(及 ANSI)字母才會正確顯示。

非 Unicode 版的 wcd 在 5.2.0 版之前 使用單純的 ANSI 輸出。這些舊版必須把主控台的碼頁設成與系統碼頁相同(改為 1252),Windows 版的 wcd 才能正確處理帶音符字母或歐元符號等特殊字元。

Windows 系統碼頁可以透過控制台的地區選項變更,Windows 主控台碼頁則用 chcp 命令變更。

輸入 wcd -V 會顯示 wcd 實際使用的字元編碼。輸入 chcp 命令則會顯示 Windows 主控台作用中的碼頁。

Unicode

wcd 可選擇性支援 Unicode。要查看 wcd 是否以支援 Unicode 的方式建置,請輸入 wcd -V。若您的終端機/主控台與字型支援,應該會看到歐元符號與中文字(意思是「中文」)。

wcd 已 軟性 轉換為 Unicode。其核心仍將所有資料視為位元組串流,只有印到畫面上的行才會即時轉換為 Unicode 寬字元。wcd 完全依賴 libc 函式,沒有專為 UTF-8 撰寫的程式碼。請另參閱 https://www.cl.cam.ac.uk/~mgk25/unicode.html

wcd 可選擇性支援含正規化的 Unicode 比對。要查看 wcd 是否具備正規化支援,請輸入 wcd -V。具備 Unicode 正規化支援的 wcd 會依 相容 等價性比對 Unicode 名稱;不具備正規化支援時,名稱必須在二進位上等價才會比對成功。請另參閱 https://en.wikipedia.org/wiki/Unicode_normalization

Unix/Linux 上的 UTF-8

要顯示 UTF-8 字元,主控台/終端機也必須支援 UTF-8。XFree86 4.0 以上版本所附的 xterm 內含 UTF-8 支援。要啟用它,請在 UTF-8 地區設定中啟動 xterm(1),並使用 iso10646-1 編碼的字型,例如:

LC_CTYPE=en_GB.UTF-8 xterm -u8 -fn '-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1'

現代 GNU/Linux 發行版預設支援 UTF-8。其他多位元字元編碼應該也能運作,但尚未經過測試。

wcd 假設 treedata 檔案是以地區設定的字元編碼編碼。treedata 檔案不會寫入位元組順序記號 (BOM)。

Windows 上的 UTF-16

在 Windows 上,所有版本的 PowerShell 都支援 Unicode,Windows 7(或更新版本)的命令提示字元也支援 Unicode。JP Software 製作的 Take Command 或 TCC/LE 也支援 Unicode,可在較舊的 Windows 版本(XP/Vista)上使用。

在 Windows 上,磁碟上的所有目錄名稱都以 UTF-16 Unicode 編碼。對非 Unicode 的 Windows 程式而言,Unicode 字元會被轉換為預設的 ANSI 碼頁。若字元不屬於地區設定的範圍,就無法轉換,非 Unicode 程式會印出問號或錯誤的字元。

具備 Unicode 支援的 wcd 會讀取以 UTF-16 編碼的目錄名稱,並在內部轉換為 UTF-8。所有 treedata 檔案都以 UTF-8 編碼,與非 Unicode 版的 wcd 不相容。wcd 會建立以 UTF-8 編碼的 go 腳本。

所有版本的 Windows PowerShell 都能執行以 UTF-8 編碼的腳本,但腳本中必須有 UTF-8 BOM。

自 Windows 7 起,可以在 Windows 命令提示字元中以批次腳本切換到名稱含有 Unicode 字母的目錄。目錄名稱必須以 UTF-8 編碼,批次腳本則 不得含有 BOM。在執行 cd 命令之前,必須把命令提示字元作用中的碼頁設為 65001 (UTF-8)。命令提示字元版的 wcd 會產生這樣的 go 腳本 wcdgo.bat:它會先把碼頁改成 65001,再切換目錄,最後把碼頁設回原本的碼頁。

若字母無法正確顯示,必須把字型設為 True Type Lucida Console(而非點陣字型)。

自 5.2.0 版起,非 Unicode 的 Windows 版 wcd 可以讀取 Unicode treedata 檔案(前提是檔案中有位元組順序記號 (BOM),見 https://en.wikipedia.org/wiki/Byte_order_mark),但無法切換到名稱中含有不在預設系統 ANSI 碼頁範圍內之 Unicode 字母的目錄。自 5.2.0 版起,Unicode 版的 wcd 會在以 UTF-8 編碼的 treedata 檔案中寫入 BOM,因此這些檔案連記事本也讀得。

Cygwin 上的 UTF-8

Cygwin 自 1.7 版起支援 Unicode。Cygwin 層會負責把 Windows 的 UTF-16 Unicode 名稱轉換為 UTF-8,因此像 wcd 這類程式不需要特別處理,可以像在 Unix/Linux 上一樣使用 UTF-8 編碼運作。請用 LANG 或 LC_CTYPE 環境變數將字元編碼設為 UTF-8。您可能需要重新掃描磁碟機。若使用預設的 Cygwin 主控台,必須把字型設為 True Type Lucida Console(而非點陣字型)。

Cygwin 版的行為與 Unix 版的 wcd 完全相同。treedata 檔案中不會寫入 BOM,並假設以 Cygwin 地區設定的字元編碼編碼。

檔案

若已設定環境變數 WCDHOME,wcd 會使用 WCDHOME 而非 HOME。所有 *.wcd 檔案都是文字檔,可以用文字編輯器編輯。Windows 命令提示字元版的 wcd 行為與 DOS 版相同;Cygwin 版的 wcd 行為則與 Unix 版相同。

wcd.exe

就是程式本身。在 Unix shell 中,由於 Unix shell 目前的工作目錄只能用內建的 cd 命令變更,因此這支程式一律由函式或別名呼叫。請另參見「安裝」一節。

預設 treedata 檔案

這是 wcd 用來搜尋符合項的預設 treedata 檔案。若無法讀取,wcd 會建立一個新的。

DOS: \treedata.wcd or %HOME%\treedata.wcd
Unix: $HOME/.treedata.wcd
額外 treedata 檔案

選用的額外 treedata 檔案。若檔案存在且可讀取,wcd 也會嘗試在其中尋找符合項。

DOS: \extra.wcd or %HOME%\extra.wcd
Unix: $HOME/.extra.wcd
封鎖檔案

wcd 會把被封鎖的路徑放在這個選用檔案中。請參見 -b 選項。支援萬用字元。

DOS: \ban.wcd or %HOME%\ban.wcd
Unix: $HOME/.ban.wcd
別名檔案

存放 wcd 別名的選用檔案。請參見 -l 選項。

DOS: \alias.wcd or %HOME%\alias.wcd
Unix: $HOME/.alias.wcd
堆疊檔案

wcd 會把堆疊存放在這個檔案中。磁碟機代號可以用 -d 選項變更。

DOS: c:\stack.wcd or %HOME%\stack.wcd
Unix: $HOME/.stack.wcd

堆疊檔案的名稱可以用環境變數 WCDSTACKFILE 變更。請參見「環境變數」一節。

go 腳本

這是 wcd.exe 每次都會產生的 shell 腳本,會由函式或別名 source。磁碟機代號可以用 -d 選項變更。基於歷史因素,在 Unix 系統上它預設放在 $HOME/bin。這個檔案的位置可以用 -G 選項變更。

DOS bash: c:/wcd.go or $HOME/wcd.go
Windows Command Prompt: c:\wcdgo.bat or %HOME%\wcdgo.bat
Windows PowerShell: $env:HOME\wcdgo.ps1
WinZsh: $HOME/wcd.go
Cygwin/MSYS: $HOME/bin/wcd.go
OS/2 Command Prompt: c:\wcdgo.cmd or %HOME%\wcdgo.cmd
OS/2 bash: c:/wcd.go or $HOME/wcd.go
Unix: $HOME/bin/wcd.go
相對 treedata 檔案

存放從 DIR 起算之相對路徑的文字檔。請參見 +S、-n 與 +n 選項。

DOS: PATH\rtdata.wcd
Unix: PATH/.rtdata.wcd

環境變數

HOME

wcd 預設使用環境變數 HOME 來決定檔案存放位置。請另參見「檔案」一節。可以使用環境變數 WCDHOME 覆寫此設定。

使用 -s 選項時,HOME 也決定從哪裡開始掃描磁碟。此設定可以用環境變數 WCDSCAN 覆寫。

Unix、Cygwin、Windows PowerShell、WinZsh 與 MSYS 版必須設定 HOME 或 WCDHOME。其他版本的 wcd 則可以選擇性使用這些變數。

若在 DOS/Windows 上設定了 HOME,wcd 會把所有檔案 (treedata.wcd、extra.wcd、alias.wcd、ban.wcd、wcd.go) 放在 HOME 目錄中,此時 wcd 的行為與 Unix 版相同。wcd 預設會從 HOME 掃描磁碟,不會因為切換到某個磁碟機就自動掃描,您必須明確告知 wcd。例如:

wcd -S c: -A d: -A e:

此時目錄比對會在所有已掃描的磁碟機之間通用。

WCDHOME

環境變數 WCDHOME 可用來變更 wcd 檔案的位置。若 HOME 與 WCDHOME 都有設定,會使用 WCDHOME 而非 HOME。

在 5.1.5 版之前的 wcd 中,WCDHOME 也會變更預設的掃描目錄。現在情況已改變:自 5.1.5 版起,WCDHOME 不再變更預設的掃描目錄。請參見 -s 選項。自 5.1.5 版起,請使用環境變數 WCDSCAN 覆寫預設的掃描目錄。

DOS、Windows、OS/2 命令提示字元的範例:

set WCDHOME=C:\Users\erwin\wcd

POSIX 類 shell 的範例:

export WCDHOME="$HOME/.wcd"

Csh 類 shell 的範例:

setenv WCDHOME "$HOME/.wcd"
WCDSCAN

使用環境變數 WCDSCAN 可以覆寫預設的掃描目錄 HOME。可定義以冒號分隔的清單 (Unix) 來指定多個目錄;在 DOS/Windows 上請改用分號分隔。

DOS、Windows、OS/2 命令提示字元的範例:

set WCDSCAN=C:\Users\erwin;D:\data

set WCDSCAN=%HOMEDRIVE%%HOMEPATH%;\\projectdrive\projectX

POSIX 類 shell 的範例:

export WCDSCAN="$HOME:/projectdisk/projectX"

Csh 類 shell 的範例:

setenv WCDSCAN "$HOME:/projectdisk/projectX"
WCDFILTER

使用環境變數 WCDFILTER 指定過濾條件,不符合過濾條件的目錄都會被忽略。可以用 shell 的路徑分隔符分隔多個條件來指定清單,類似於指定 PATH 變數。是否區分大小寫由作業系統決定。

DOS、Windows、OS/2 命令提示字元的範例:

set WCDFILTER=projects;doc

POSIX 類 shell 的範例:

export WCDFILTER="projects:doc"

Csh 類 shell 的範例:

setenv WCDFILTER "projects:doc"
WCDBAN

以環境變數 WCDBAN 指定的路徑會被 wcd 封鎖。請另參見 -b 選項。請指定一份以 shell PATH 分隔符分隔的路徑清單。

WCDEXCLUDE

以環境變數 WCDEXCLUDE 指定的路徑會被 wcd 排除。請另參見 -x 與 -xf 選項。請指定一份以 shell PATH 分隔符分隔的路徑清單。

DOS、Windows、OS/2 命令提示字元的範例:

set WCDEXCLUDE=*/windows;*/temp;*CVS

POSIX 類 shell 的範例:

export WCDEXCLUDE="/dev:/tmp:*CVS"

Csh 類 shell 的範例:

setenv WCDEXCLUDE "/dev:/tmp:*CVS"
WCDUSERSHOME

設定使用者家目錄的基底位置。在 DOS/Windows 上預設值是 \\users,在 Unix/Cygwin 上預設值是 /home。這個變數用來掃描其他使用者的 treedata 檔案。請另參見 -u 與 +u 選項。在詳細模式中,wcd 會印出所有過濾條件、封鎖與排除設定。請參見 -v 選項。

WCDSTACKFILE

wcd 採用 WCDSTACKFILE 的優先權高於預設的堆疊檔案名稱(見「檔案」一節)。有了這個變數,每個 shell(或使用的終端機模擬器)都可以有自己的已用目錄堆疊。

這樣每開啟一個互動式 shell 就會使用一個以時間為基礎、檔名形如 YYYYMMDD-HHMMSS 的唯一檔案。

export WCDSTACKFILE=$HOME/.wcd/stack.$(date +%Y%m%d-%H%M%S)

若要讓每個 xterm(1) 各有一個堆疊,請使用 xterm 的 WINDOWID 環境變數:

export WCDSTACKFILE=$HOME/.wcd/stack.$WINDOWID

若使用 GNU screen(1),要讓每個 screen 各有一個堆疊:

export WCDSTACKFILE=$HOME/.wcd/stack.$WINDOW
TERMINFO

若已定義環境變數 TERMINFO,具備 ncurses 介面的 wcd 會先在本機尋找終端機定義,再查詢標準位置。這在終端機定義不在標準位置時很有用。常用的標準位置是 /usr/lib/terminfo 與 /usr/share/terminfo。

PDC_RESTORE_SCREEN

具備 PDCurses 介面的 wcd 會辨識環境變數 PDC_RESTORE_SCREEN。若設定了這個環境變數,PDCurses 會在 wcd 啟動時複製一份畫面內容;wcd 結束時就會還原畫面。Windows 命令提示字元的範例:

set PDC_RESTORE_SCREEN=1

Windows 只允許儲存小型的緩衝區,因此不一定能還原所有內容。若您把緩衝區寬度設得很大,wcd 結束後主控台可能會印出一些垃圾資料。

SHELL

對 POSIX 類 shell 或 C 類 shell,必須在 go 腳本的第一列印出 #!$SHELL,8 位元字元才能正確運作,否則某些 shell 會認為 go 腳本是二進位檔而不會 source。在 Cygwin Bash 中,必須用 export 命令把變數 SHELL 設入環境,否則 wcd 無法讀取該變數。

BASH

DOS bash 版的 wcd 使用 $BASH 而非 $SHELL,因為 $SHELL 指向 DOS 命令 shell。可能需要用 export 命令定義 $BASH,否則 wcd 無法讀取該變數。

參見

sh(1), bash(1), csh(1), ksh(1), zsh(1), locale(1), ncurses(1),

作者

wcd 由 Erwin Waterlander <waterlan@xs4all.nl> 撰寫

專案首頁:https://waterlander.net/wcd/

SourceForge:https://sourceforge.net/projects/wcd/

手冊頁的排版由 Jari Aalto <jari.aalto@cante.net> 提供。

NCD 最初是 Brad Kingsbury 於 1987 年左右為 Peter Norton 的《Norton Utilities》撰寫的。請另參閱 https://www.softpanorama.org/OFM/norton_change_directory_clones.shtml