bashでエイリアスをインラインで展開する方法は?


84

bashでエイリアスをインラインで展開する方法はありますか?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

回答:


107

あなたは押すことができますCtrl- Alt- ereadlineの機能を実行するためにshell-expand-line、エイリアス、歴史や単語展開を行います。一部のキーボードでMetaはそうではないことに注意してくださいAltEscその後、押す必要があるかもしれませんCtrl-e

関数alias-expand-linehistory-and-alias-expand-lineはデフォルトではバインドされていませんが、次のような行を~/.inputrcファイルに追加することでバインドできます。

"\e\C-l": alias-expand-line

これになるだろうCtrl- - Altl小文字「エル」)を行うのみエイリアス展開を。


他のbash補完に影響を与えることなく、エイリアス展開を<tab>にマッピングできますか?
asdfg

2
@asdfg:実行すると、他の補完が中断されます。これは、可能性がある上記のようなマップを作成する(未テスト)が動作した後タブの既存の交換には、この追加のマップを追加します。"\C-i": "\e\C-l\e\e"両方を実行するマクロ作成alias-expand-lineとをcomplete。上記の回答のバインディングと、Esc-Escのデフォルトのバインディングがそのまま残っているかどうかに依存します。デフォルトの補完を行いたい場合は、Esc-Escを実行できます。
デニスウィリアムソン

4
実際、ESC C-eBashではC-x a機能しますが、Zsh では機能します。OS Xでもテスト済み
。– Blaz

Ctrlキーを押しながら何かを探している場合は、何かが「x」キーになる可能性があるため、一部のシステムでは次のようにできますControl-x: history-and-alias-expand-line
igordcard

1
@WeijunZhou:それはあなたのウィンドウマネージャとあなたが持っているカスタム設定に依存します。たとえば、Gnomeの場合、ロック画面はSuper + Lです。
デニスウィリアムソン

2

これは実際にあなたがやろうとしていることを実行するはるかに簡単な方法かもしれません(bashバージョン> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptmanページ:https : //www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
これは間違っています。シェルオプション "direxpand"および "expand_aliases"は、質問で指定されているように、エイリアスをインラインで展開するのに役立ちません。どのディレクトリから「direxpand」が取られたのかわかりません...?デフォルトでは、「expand_aliases」はすでに設定されています。設定を解除すると、基本的にエイリアスの機能が無効になります(エイリアスはコマンドラインの解釈前に展開されません)。たとえば、エイリアスを指定すると alias ll='ls -l、シェルは 'll'をコマンド/関数 'll'として解釈しますが、これは存在しない可能性があります。
FooF

0

これは動作しません。しかし、私はあなたがやりたいことをするためにこのようなことができると推測しています/期待しています。独自の完了スクリプトを使用する必要があります。これはあなたがそれを作る方法です:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

完全なbash_completionファイル(http://caliban.org/bash)を入手し、上記のスクリプトを、URLから取得したスクリプトが参照するbash_completion.dディレクトリ内のファイルに配置します。うまくいかない場合は教えてください。

ありがとう。


0

zshをインストールしてシンプルなソリューションを探している人にとって、globaliasはあなたの友人かもしれません

すべてのグロブ式、サブコマンド、およびエイリアス(グローバルを含む)を展開します。

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

インストールするには、「globalias」を.zshrcプラグインリストに追加するだけです

plugins=(... globalias)

次に、を押しSPACEて、作成したコマンドの展開をトリガーします。

コマンドラインを展開せずにスペースのみを挿入する場合は、 CTRL+SPACE

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.