我最近安裝了bash-completion
(透過自製程序)。現在它省略了我在完成清單中的文件想它顯示,並完全省略有效選項,例如:
[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))
作為一個重度命令列用戶,這是非常煩人的。誰能告訴我如何停用這種行為?我在文件或谷歌中找不到任何有用的東西。
bash 完成常問問題說:
Q:bash 完成程式碼禁止某些命令在我的環境中具有合法副檔名的檔案上完成。我是否必須禁用該命令的完成才能完成我需要的文件?
答:不行。這將規避 bash 完成程式碼設定的任何檔案類型限制。
但這對我來說不是一個可以接受的解決方案- 我希望“TAB”顯示所有文件/目錄,無論擴展名是否對文件有效(這就是它在過去20 年中對我來說運作良好的方式) 。
我怎樣才能實現這個目標?
我更喜歡.bashrc
/.bash_profile
設定而不是刪除全域完成腳本。以下是我目前包含 bash-completion 的方式(這只是一個普通的自製軟體安裝):
[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
更新:我見過這個Bash 檔名 tab 補全但這並不完全是我想要的,因為它需要為地球/我的系統上的每個可能的檔案副檔名進行太多的手動工作。
答案1
接受的答案仍然沒有真正解決問題,因為它破壞了命令完成(即“pyt+ TAB
”來獲取python等),因為它不包含在完整文件名中。
complete -o default python
這不會解決所有命令的問題(本例中僅解決“python”),但它將解決行為嚴重錯誤的特定命令的問題。不幸的是,似乎沒有一種乾淨的方法可以對所有內容設定「預設」(即 Readline 的預設值),必須對您可能使用的每個命令進行設定。或使用上面的 .inputrc 解決方法。
答案2
也為此煩惱,所以我讀了bash手冊。我相信將此作為您的~/.inputrc
文件可以實現所需的行為:
TAB: complete-filename
M-/: complete
具有全套規則的常規補全映射到Meta-/
,僅文件名補全映射到TAB
.