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 則切換到下一個資料夾(或檔案),只需要下述設定即可。
- 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 反應 - source ~/.bashrc # 使設定生效
設定生效後,快速鍵主要有兩個:
- Tab
- Shift + Tab
詳細說明如下:(假設有兩個目錄 example1、example2)
- ls e[tab] # 會自動補期 example1,再按 [tab] 會補上 example2
- 想要進入 example2 再看內容,則於下述使用 Shift + Tab 進入,然後再按 Tab 即可
- ls example2[shift-tab] # 進入此資料夾名稱,於下述按 Tab 則會秀出此目錄下的內容
- ls example2/[tab] # 列出此目錄下的所有內容,一樣會自動補齊於 CLI 命令列上
若不想自動補齊,而是想要原本只是秀出來看 e 的效果,使用 Shift-Tab (需有上述 \e[Z 那行)
- ls e[Shift-Tab]
- 列出 e 於上面,若只有一個,跟原本 [Tab] 效果一樣,會自動補齊
註:我個人還是不太習慣這種自動補期,但是偶爾會需要這類型的 (ex:簡體、日文字打不出來),所以我反過來設定:
- 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 還是維持原樣,此行可以不用寫,這是預設值 - source ~/.bashrc
- 這樣 Tab 還是原本的,有需要自動補齊時,使用 Shfit-Tab 即可