Bash

如何更改選項卡完成的目標目錄?

  • April 1, 2014

我找到了一個簡短的腳本,可以在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 中的文件完成,而不是使用目前目錄中的文件?

如果您理解所有這些電子喃喃自語,恭喜您,如果您能回答,非常感謝您!

這可能會讓你到達那裡……

  1. 在 .bashrc 中啟用自定義選項卡完成
shopt -s progcomp
  1. 創建一個 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

這對我有用 - 在基本層面上。我仍然沒有解決嵌套目錄的問題……

參考:

  1. 大部分來自這裡:http ://sixohthree.com/867/bash-completion
  2. 完成內置細節在這裡:http ://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html

引用自:https://unix.stackexchange.com/questions/11906