簡體   English   中英

Bash選項卡完成更改了行為

[英]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。 這是做什么的:

  • 更改TAB鍵以插入兩個字符:ESC-Ctrl-e ESC-Ctrl-t。
  • 將ESC-Ctrl-t映射到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM