Bash
如何更改選項卡完成的目標目錄?
我找到了一個簡短的腳本,可以在onethingwell上做筆記,其中包括:
function n { nano ~/n/$1.txt }
我想擴展它來完成製表符,這樣如果我想編輯預先存在的註釋 ‘foobar’ (~/n/foobar.txt) 我可以輸入
foo[TAB]
並讓它自動完成foobar
,而不是必須每次都輸入“foobar”。問題是 bash 的內置選項卡補全似乎以目前目錄為中心,所以如果我在一個不是 ~/n 的文件夾中,那麼我的選項卡補全失敗 - 或者更糟糕的是,完成錯誤事情,因為也許我在 ~/snafu/ 中有一個名為 ‘footastic’ 的文件(意味著我輸入$ n foo[TAB]
,而不是看到$ n foobar
,我查看我的輸入並查看:$ n footastic
。所以,在所有的序言之後,這裡的問題是:如果可能的話,我怎麼能告訴 bash 在我輸入“n”之後,我希望它假設我們正在完成使用 ~/n 中的文件完成,而不是使用目前目錄中的文件?
如果您理解所有這些電子喃喃自語,恭喜您,如果您能回答,非常感謝您!
這可能會讓你到達那裡……
- 在 .bashrc 中啟用自定義選項卡完成
shopt -s progcomp
- 創建一個 compgen 函式並將其添加到 .bashrc在您的註釋函式之後。
_notes() { local cur cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -f $HOME/n/$cur | cut -d"/" -f5 ) ) } complete -o filenames -F _notes n
這對我有用 - 在基本層面上。我仍然沒有解決嵌套目錄的問題……
參考: