[英]Bash tab completion changed behavior
很長一段時間,我習慣於輸入類似的東西:
$選擇/富/平方米
等等在不同的環境中導航我的項目。 它非常有用:只需設置$ opt(例如,/ home / $ USER / projects / opt - 並從您的開發用戶轉到qa,生活,$ opt是$ opt。
截至發布bash4.2時,此行為已發生變化。 現在標簽完成導致轉義$符號。
$ opt / foo => \\ $ opt / foo <=根本不是我的意思!
雖然維護者正在討論這應該如何工作,但我想找到一套新的習慣,我可以用來回到我的舒適區。 什么是好招? 我的手指可以學習的東西,有一些根配置,從那里去,而不用擔心我在哪里。
它並不完美,但解決方法是使用ESC ctrl-e強制擴展變量然后點擊標簽(至少在emacs模式下......不確定vi模式)
zsh解決方案對我有用。 這是簡單的轉換我的.bashrc => .zshrc,我有一些復雜的shell函數/別名。
我同意,bash維護者在世界上如何打破這個非常基本的標簽完成功能。
另一個我沒試過的解決方案是使用另一個發行版的bash。 我只在Mint 13發行版中看到過這個。 Ubuntu / Fedora bash運行正常。
基於frankc的回答:嘗試將以下內容放入~/.inputrc
:
"TAB": "\M-\C-e\M-\C-t"
"\M-\C-t": complete
然后開始一個新的shell。 這是做什么的:
complete
功能,這是您按TAB時通常調用的功能。 (您可以使用任何其他組合鍵而不是ESC-Ctrl-t,但通常不使用它。) 由於ESC-Ctrl-e已經映射到shell-expand-line
函數,現在當你按TAB時,bash首先展開你的變量( $opt
),然后像往常一樣自動完成。
這里和其他地方建議的變通方法對我來說完全失敗,或者輸入太麻煩。
最終,一位朋友建議使用zshell(zsh)。 有用! 我沒有進行自定義,將.zshrc留空。
現在我按順序完成了標簽的完成。 它與我以前的工作方式略有不同:舊的bash風格和vi風格的混合。 按Tab鍵顯示可能的多個選項列表,然后再次選項卡將開始從該列表中選擇並交替,如vi。
我很開心
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.