我可以透過 cmd.exe 選項卡補全來忽略點檔嗎?

我可以透過 cmd.exe 選項卡補全來忽略點檔嗎?

不幸的是,我需要時不時地使用 cmd.exe,它通常不會給我帶來太多麻煩,除非我在 vim 中編輯文件,然後嘗試使用製表符補全來運行該文件。

foo.py如果我在 vim 中開啟該文件,.foo.py.swp該文件也存在於該目錄中。我看到的行為是:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

這相當令人惱火,我想知道是否有任何方法可以阻止這種行為,除非有完整的解決方法,例如更改交換文件命名或使用 PowerShell。我確實注意到 PowerShell 沒有模擬這種行為,但我真的不想使用它。

答案1

如果您仔細考慮的話,Windows 的行為完全符合您的預期(說實話,在看到您的問題之前,我還沒有完全考慮清楚)。以“.”開頭的檔名被視為具有空檔名和副檔名的檔案。要了解其工作原理,請建立目錄,然後使用touch(我假設您熟悉touch)建立以下檔案:

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

現在,在該目錄中,使用tab鍵循環瀏覽文件,您將看到順序為:

.a.aaa
.b.bbb
a.aaa
b.bbb

如果您想瀏覽“a”文件,請在 之前鍵入“a”,tab您將得到一個可預測的.a.aaa, a.aaa

至於_檔案名稱中的字符,它就像任何其他字符一樣,排在“Z”之後。

答案2

FindFirstFile 的語意(CMD 用於枚舉匹配檔案)表示該模式會針對長檔案名稱(您希望看到的內容)以及自動產生的「8.3」檔案名稱進行測試。短名稱產生是導致虛假匹配的原因。

您可以透過 FSUTIL 停用 8.3 生成,但這會停止進一步生成並且不會刪除已經存在的名稱。您必須執行一個可以重新命名的腳本才能完全刪除它們。

然而,這很危險,因為有些程式毫無頭緒,會寫下自動產生的短名稱(假設您使用的是 16 位元安裝程序,例如舊版本的 MSOFFICE)。如果您停用它們的生成,那麼這些安裝程式可能會失敗。

相關內容