X

Bash 使用 Tab 自動完成 檔案或目錄的輸入

Bash shell 要選取 資料夾 / 檔案,可以使用 Tab 來輔助

  • Tab 一次會自動補期 (若目錄只有一個,Tab 一直按,會一直往下補下去)
  • Tab 二次會秀出此資料夾的所有檔案內容

在 Zsh 使用到按 Tab,若有多個資料夾,就會自動選取(自動補齊 / 自動完成)資料夾,按 Tab 則繼續其他資料夾挑選,於 Bash 要怎麼達成呢?

Bash 使用 Tab 自動完成 檔案或目錄的輸入

於 Bash 有下面兩個參數可以使用,預設 [Tab] 是使用 complete

  • complete # 列出來,或者自動補齊
  • menu-complete # 自動補齊上去

可於 Shell 直接使用下述,就可以按 Tab 自動完成嘗試看看:

  • $ bind 'set show-all-if-ambiguous on'
  • $ bind 'TAB:menu-complete'

於 Bash shell 想要按 Tab 就可以載入資料夾名稱(或檔案),按 Tab 則切換到下一個資料夾(或檔案),只需要下述設定即可。

  1. vim ~/.bashrc # set completion-ignore-case on 此行我沒加上
    # set completion-ignore-case on
    set show-all-if-ambiguous on
    bind 'TAB:menu-complete' bind '"\e[Z":complete' # 使用 Shift-Tab 維持原本 Tab 反應
  2. source ~/.bashrc # 使設定生效

設定生效後,快速鍵主要有兩個:

  • Tab
  • Shift + Tab

詳細說明如下:(假設有兩個目錄 example1、example2)

  1. ls e[tab] # 會自動補期 example1,再按 [tab] 會補上 example2
  2. 想要進入 example2 再看內容,則於下述使用 Shift + Tab 進入,然後再按 Tab 即可
  3. ls example2[shift-tab] # 進入此資料夾名稱,於下述按 Tab 則會秀出此目錄下的內容
  4. ls example2/[tab] # 列出此目錄下的所有內容,一樣會自動補齊於 CLI 命令列上

若不想自動補齊,而是想要原本只是秀出來看 e 的效果,使用 Shift-Tab (需有上述 \e[Z 那行)

  1. ls e[Shift-Tab]
  2. 列出 e 於上面,若只有一個,跟原本 [Tab] 效果一樣,會自動補齊

註:我個人還是不太習慣這種自動補期,但是偶爾會需要這類型的 (ex:簡體、日文字打不出來),所以我反過來設定:

  1. vim ~/.bashrc # set completion-ignore-case on 此行我沒加上
    # set completion-ignore-case on
    set show-all-if-ambiguous on
    bind '"\e[Z":menu-complete' # Shift-Tab 會自動補齊
    bind 'TAB:complete' # Tab 還是維持原樣,此行可以不用寫,這是預設值
  2. source ~/.bashrc
  3. 這樣 Tab 還是原本的,有需要自動補齊時,使用 Shfit-Tab 即可

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post