1

私は次のようなエイリアスを作成しようとしていました:

alias '.a'='git add'
alias '.d'='git diff'
alias '.p'='git push'
alias '.f'='git fetch'
alias '.o'='git checkout'
alias '.c'='git commit -m'
alias '.b'='git branch'
alias '.s'='git status'
alias '.m'='git merge'
alias '.l'='git log -n 20 --oneline'

オートコンプリートは常に重要なので、次のように試しました。

complete -F _git_checkout .o

しかし、入力した後のようなエラーが発生しました<tab><tab>

#➤➤ .o bash: [: 1: unary operator expected
bash: [: 1: unary operator expected

では、どうすればここで機能させることができますか?


私のデスクトップは Ubuntu 13.04 で動作します


@1、Ubuntu で失敗したと思われるコードをここに追加します。

➤➤ complete | ack-grep alias
complete -F _alias_completion::grep grep
complete -F _alias_completion::la la
complete -F _alias_completion::ll ll
complete -F _alias_completion::l l
complete -F _alias_completion::ls ls
complete -a unalias
4

2 に答える 2

1

私は、「git checkout」エイリアス (gc、おそらく適切なエイリアスではない) に特化した自動補完ソリューションを探していて、$COMP_WORDS および $COMP_CWORD 変数を変更する定義を考え出しました。

# !/bin/sh

# Define a custom complete function for 'git checkout'.
___git_gco ()
{
    # Set the first word to git and insert checkout.
    COMP_WORDS=(git checkout ${COMP_WORDS[@]:1})
    # Increment the current word cursor, since we added one word.
    COMP_CWORD=$((COMP_CWORD + 1))

    # Show some debug information.
    # echo -n -e "\n${COMP_WORDS[0]}"
    # echo -n -e "\n${COMP_WORDS[1]}"
    # echo -n -e "\n${COMP_WORDS[$COMP_CWORD]}"
    # echo -n -e "\n${COMP_WORDS[@]}"

    # Call Git's default complete function.
    _git
}
# Define an alias for 'git checkout'.
alias gco="git checkout"
# Set the new alias to use the custom complete function.
complete -o bashdefault -o default -o nospace -F ___git_gco gco

このソリューションがどれほど優れているかはわかりません。これは、bash によって準備されたものをいじっているためです (変更が必要な可能性があることに気付いていない他の変数が提供されている可能性があります)。オプションなしでブランチをチェックアウトする最も単純なケースについてのみテストされました (ただし、オプションは完了します)。

要点は - ブランチをチェックアウトするために機能します。

于 2014-08-13T17:34:50.470 に答える
0

のような補完を定義しないでくださいcomplete -F _git_checkout .o。エイリアス完了コードを使用します (上記の Ansgar Wiechers によって示されます)。そのスクリプトを入手した後、次のような補完

complete -o bashdefault -o default -o nospace -F _alias_completion::.o .o

定義されています。

于 2013-07-30T12:50:25.497 に答える