次のような単純なmakefileがあるとします。
hello:
echo "hello world"
bye:
echo "bye bye"
次に、bashで次のようなものが必要です。
h<タブ>を作成します
完了できるように
こんにちは
空のファイルhello
を作成するような簡単な方法を見つけましたが、もっと洗練されbye
たものを探しています。
次のような単純なmakefileがあるとします。
hello:
echo "hello world"
bye:
echo "bye bye"
次に、bashで次のようなものが必要です。
h<タブ>を作成します
完了できるように
こんにちは
空のファイルhello
を作成するような簡単な方法を見つけましたが、もっと洗練されbye
たものを探しています。
これを〜/ .bash_profileファイルまたは〜/.bashrcファイルに追加します
complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' ?akefile | sed 's/[^a-zA-Z0-9_.-]*$//'\`" make
?
これは、grepを使用して「Makefile」または「makefile」(の大文字のワイルドカードに注意)というタイトルのMakefile内のターゲットを検索し、引数のオートコンプリート方法を指定するために使用されるbash?akefile
のコマンドにパイプします。フラグは、コマンドへの入力が、grepの結果を渡すことによって実行されるワードリストであることを示しますcomplete
。これにより、コマンドが望ましいワードリスト形式に配置されます。-W
complete
sed
警告と落とし穴:
makeファイルの名前は「GNUMakefile」または「Makefile」または「makefile」以外の名前です。このようなタイトルに頻繁に遭遇する場合は、?akefile
それに応じて正規表現を変更することを検討してください。
変更を加えた後、〜/ .bash_profileまたは〜/.bashrcファイルのソースを忘れています。初心者にはなじみがないので、この一見些細な詳細を追加します。bashファイルへの変更を有効にするには、コマンドを使用してそれらをソースします
source ~/.bashrc
また
source ~/.bash_profile
PS。また、bashの完了と同じように、[Tab]を2回押すことで、可能なmakeターゲットを表示する機能が追加されました。[Tab]を2回入力する前に、コマンドmakeの後にスペースを追加してください。
これはあなたが探しているものでしょうか?
http://freshmeat.net/projects/bashcompletion/
make [Tab]は、Makefile内のすべてのターゲットで完了します。このプロジェクトは、最も一般的なLinux / UNIXコマンドのプログラム可能な完了ルーチンを作成し、システム管理者やプログラマーが日常的に行う必要のある入力の量を減らすために考案されました。
ほとんどすべてのOSで利用可能なbash-completionと呼ばれる便利なパッケージがあります。Makefileの完了が含まれます。
(macOSとHomebrewを使用している場合は、を介してこれを取得できますbrew install bash-completion
。)
これは、少なくともDebianLennyではデフォルトのようです。
$ grep Makefile /etc/bash_completion
# make reads `GNUmakefile', then `makefile', then `Makefile'
elif [ -f ${makef_dir}/Makefile ]; then
makef=${makef_dir}/Makefile
# before we scan for targets, see if a Makefile name was
# deal with included Makefiles
このファイルのヘッダーには次のように記載されています。
# The latest version of this software can be obtained here:
#
# http://bash-completion.alioth.debian.org/
#
# RELEASE: 20080617.5
.PHONY:宣言を確認する完了スクリプトを次に示します。
_make_phony_words() {
local opt_revert
if [ -n "${BASH_VERSION:-}" ]; then
shopt -q nullglob || {
opt_revert=1 ; shopt -s nullglob ;
}
elif [ -n "${ZSH_VERSION:-}" ]; then
[[ -o nullglob ]] || {
opt_revert=1 ; setopt nullglob
}
fi
for f in ./?akefile ./*.make ; do
sed -nEe '/^.PHONY/ { s/^.PHONY:[ ]?// ; p ; } ' "$f" | tr ' ' $'\n' | sort -u
done
if [ -n "$opt_revert" ]; then
[ -n "${ZSH_VERSION:-}" ] && unsetopt nullglob
[ -n "${BASH_VERSION:-}" ] && shopt -u nullglob
fi
unset opt_revert
}
_make_phony_complete() {
local cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY+=( $(compgen -W "$( _make_phony_words )" -- ${cur}) )
}
complete -F _make_phony_complete make
Ubuntu 10.04では、次のファイルを入手します。
. /etc/bash_completion
またはコメントを外します
/etc/bash.bashrc