実際のコマンドで実行できるように、オートコンプリートするエイリアスの引数で[TAB]を機能させる方法


9

.bash_aliasesファイルに作成した多くのエイリアスがあり、それらは非常に便利なので、パッケージのすべての情報が必要な場合は、次のようにします。

allinfo software-center

そしてそれは以下と同等です:

apt-cache show software-center

エイリアスが次のように設定されているため:

alias allinfo='apt-cache show'

しかし、これには1つの欠点があります。現在、実際のコマンドの代わりTABに使用allinfoすると、オートコンプリートできません。したがって、この欠点を克服allinfo software-ce[TAB]し、実際のコマンドで使用する場合と同じように機能するようにして、大きなタブスペースを作成するだけの方法があるのではないかと思いました。

使用していgnome-terminalます。


OS情報:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

パッケージ情報:

gnome-terminal:
  Installed: 3.14.2-0ubuntu3
  Candidate: 3.14.2-0ubuntu3
  Version table:
 *** 3.14.2-0ubuntu3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status

これは良い質問です。その背後にあるアイデアが大好きです。私は全体を見渡していて、いくつかの近い答えを見つけましたが、私がそれらを試してみると失敗します。思いついたらお知らせします。=)
Terrance、2015

回答:


6

すばらしい質問です。allinfoコマンドがと同じだった場合apt-cache(つまり、がない場合show)、の補完apt-cacheを確認して、allinfoエイリアスに適用できます。

ただし、apt-cache補完のサブセットが必要なので、もう少し作業が必要です。

私たちはの完了の定義を見るとapt-cache-に/usr/share/bash-completion/completions/apt-cache、私たちは次のようにするために使用されている参照showサブコマンド:

        COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) )

-これは、COMPREPLY変数を一致するパッケージのリストに設定するだけです。

したがって、これを借りて独自の関数を記述し、それをallinfoエイリアスにバインドできます。

# define a function to print the possible completions for
# an allinfo invocation
_allinfo()
{
    _init_completion || return
    COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2>/dev/null))
    return 0
}

# bind the above completion function to the 'allinfo' alias
complete -F _allinfo allinfo

そのフラグメントを.bashrcファイルに追加すると、期待どおりに補完が機能するはずです。


0

についてはわかりませんbashが、zshと一部のプラグインで動作します

z-shellを

sudo apt-get install zsh

zシェルを標準シェルとして設定します

sudo chsh "$USER" -s $(which zsh)

zシェルを使用するために新しいターミナルを起動します

Antigen v1を追加する

cd
git clone https://github.com/zsh-users/antigen.git

そして設定する

# path to antigen clone
source ~/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle git
antigen bundle heroku
antigen bundle pip
antigen bundle lein
antigen bundle command-not-found
antigen bundle zsh-users/zsh-completions src

# Syntax highlighting bundle.
antigen bundle zsh-users/zsh-syntax-highlighting

# Load the theme.
antigen theme robbyrussell
# antigen bundle nojhan/liquidprompt

# Tell antigen that you're done.
antigen apply

一部の画像(プロンプトはnojhan / liquidprompt)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください


ああ、それは私があなたとまったく同じことをした場合にのみ機能します。それ以外の場合は、私が実行しているcdと想定し、ファイルパスを実行します。.bash_aliasesファイルを読み取るにはどうすればよいですか?

これらのプラグインをインストールしようとしましたがantigen: command not found、設定に取り掛かりました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.