よく使用されるコマンドラインコマンドのオートコンプリート?


15

一部のプロジェクトでは、次のようないくつかのコマンドを入力することがよくあります。

cd an/extremely/long/path/in/which/I/have/some/kinda/project

そして

./runmyproject --with some --command line --options set

私はかなり怠け者だと思って、これらのコマンドを何度も何度も入力しないようにします。そのため、もちろんアップキーを使用してこれらのコマンドを見つけることができますが、多くの場合、間に多くのコマンドがあるため、検索するのに入力するだけでなくさらに時間がかかります。

まだすべてを入力していないのに、よく使うコマンド全体を提案できるユーティリティがあるのではないかと思うようになりました。たとえば、「cd an /」と入力し、過去1か月に使用したことがあるため、既にパスの残りの部分を示しています。

Bash Smart Completeと呼ばれるものを見つけました。しかし、それは私が以前に使用したコマンドを参照しないという点で、少し「馬鹿げています」。私はこのSOの答えも見つけましたが、これは私がよく使うコマンドをファイルに入れることを示唆しています。しかし、新しいプロジェクトを開始したり、フォルダーやプログラムの引数を変更したりするたびに、新しいファイルを作成する必要があるため、応答性が十分ではありません。

誰か他のユーティリティやこれを達成するための他の方法を知っていますか?または、Bash Smart Completeを変更して、先月に使用したコマンドを調べ、先月に最もよく使用されたコマンドを完了することができるようにする方法を知っている人はいますか?

[編集]以下は本当に素晴らしい答えです。まだ明確な回答としてマークしていません。答えが好きではないからではありませんが、絶対に勝者ではないからです。ファイナルタームは素晴らしいプロジェクトだと思います。残念ながら、エッジの周りはまだかなり粗いです。例えば; コピーと貼り付けはまだサポートされていません。それが成熟するとき、私はそれが素晴らしい端末アプリになると思うので、しかし、私はそのプロジェクトに注目し続けます。他の答えに関しては; 彼らは、エイリアスを作成することを提案しました。エイリアスを作成することは、仕事を奪う代わりに余分な仕事を作成するため、私がやりたいことではありませんか、Ctrl + Rを使用することは素晴らしいです(私はそれを知りませんでした!)Ctrl + Rを使用することを提案した人がいたため、一方の答えをもう一方よりも強調することはできません。

そのため、今のところ間違いなくCtrl + Rを使用していますが、将来的にはFinaltermを使用するかもしれません。

すばらしい回答をありがとうございます!


2
本当に試してみてくださいzsh。それはあなたが求めているものすべてを提供します。bashのからのzshへの移行
Basharat Sialvi

BASHのマニュアルページによると、この関数はBASHにも「dynamic-complete-history」として存在します。デフォルトでは、Alt + Tabにバインドされて使用できなくなりますが、「バインド」でバインドを変更できます。
ボリスBukh

1
@BasharatSialこれを支援するためにzshは具体的に何をしますか?
プーリー

回答:


16

コマンドが頻繁に使用される場合、それらはコマンド履歴のbashトラックに記録され.bash_historyます。

秘-:CTRL-rを押すと、この履歴を逆検索してコマンドを再実行できます。

逆履歴検索モード、bashのショーでは、ライブ、あなたが入力すると、自分の与えられた入力で始まる歴史の中で最も最近のコマンド。次に、Enterキーを押して、提案されたコマンドを受け入れて実行します。CTRL-Rを押し続けると、同じプレフィックスを持つ古いコマンドに切り替わります。

これはbashに組み込まれているため、スクリプトをカスタマイズしたりソフトウェアをインストールしたりする必要はありません。これはbashの最も便利な機能の1つです。


3
コマンドを実行していない場合(必要なコマンドが見つからなかった場合など)、[ CTRL-g ]を使用して履歴検索モードからエスケープします。
MountainX-for-Monica

8

以下を端末画面に貼り付けます(Ctrl-Shift-V):

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

端末画面を終了(Ctrl-D)してから、再度端末を開きます。

これで、最初の数文字を入力してから、上または下を押して、フィルタリングされたリストをスクロールできます。


3
これが仕事を成し遂げる最も簡単な答えです!
cxrodgers

8

最終期間

最終用語と呼ばれるこの非常に有望なターミナルアプリがあります。その多くの機能の中で、コマンドを記憶する履歴もあるため、選択することができます。その他の機能は次のとおりです。

最終期間

詳細については、この記事をご覧ください

これがクリエイターのウェブサイトです。http://finalterm.org/

インストールする

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

警告

有望だと言いました。唯一の問題は、バージョン0.1であることです。以下のようないくつかのものはそうvimnano、まだうまく機能しません。また、ドラッグアンドドロップ、コピーアンドペーストをまだサポートしていないことにも気付きました。しかし、それはあなたが要求する機能を持っています。ソフトウェアが成熟するにつれて、デスクトップに最適な端末の1つになります。

スクリーンショット

動作中の関数は次のとおりです。

 機能中

お役に立てれば。

*私は生意気です、だから私はサンショウウオの背景を持っています:)


ヒントをありがとう!最終用語をチェックアウトしたところ、見栄えは良いです。残念ながら、まだコピーと貼り付けをサポートしていないようです。Ctrl + V、Ctrl + Shift + V、および右クリックを試しましたが、どれも機能していないようです。将来のためにこれを念頭に置いておきます!
kramer65

それが私が見た最大の欠点です。しかし、このプロジェクトは若いので、すぐに追加されることを期待しています。コピーアンドペーストをサポートしていないターミナルアプリを見ることができます。
マックスティザー

7

aliasコマンド全体にを使用するか、ディレクトリをに追加します$PATH。さらに、実行可能ファイル(またはスクリプトなど)を実行する場所にディレクトリを変更する必要がないため、非常に簡単です。どちらの方法でも、変更を有効にする前に、使用しているターミナルを再起動する必要があります。

bash alias例を作成する方法は次のとおりです(~/.bashrcファイルに次の行を追加します)。

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

これにより、runmyprojectオプション/引数を指定することなく、どこにいてもターミナルに入力するだけで済みます。

または、プロジェクトパスを$PATH環境変数に追加することもできます。そのためには、~/.bashrcファイルに次の行を追加します。

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

この場合、実行時に実行可能ファイルのオプション/引数を指定する必要があります。


1
問題は、端末が私の使用に反応するようにしたいということです。これにより、新しいプロジェクトで作業を開始するたびに、またはプロジェクトのディレクトリ構造を変更するたびにエイリアスを変更する必要があります。私の質問の主な部分は、何をすべきかを伝えるのではなく、私が使用するものから学んでほしいことです。
kramer65

ああ、分かった。次に、現在最も評価の高い回答がそのトリックを実行します。または少なくとも密接に。
oaskamay

4

次のようなディレクトリに頻繁に変更する必要があると感じた場合:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

私はこれを一度だけします:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

そして、それ以降は、次を使用します。

cd ~/pr[tab]

それに関しては:

./runmyproject --with some --command line --options set

bash履歴検索を使用します。コマンドプロンプトでCtrl-Rを押し、「runmy」と入力します。Voila、最後に入力されたときのすべてのオプションを含むコマンド全体が、すぐに再入力されます。前回使用したオプションが気に入らず、以前のコマンドを確認したい場合は、Ctrlキーを押しながらRキーを押して、「runmy」を含む以前のすべてのコマンドを繰り返し表示します。

シンボリックリンクのアイデアが気に入らない場合、Ctrl-R履歴検索は「cd」コマンドにも役立ちます。[Ctrl-R] / projは、実際にそのディレクトリにcdするために使用した最後のコマンドを戻す可能性があります。

エイリアスを追加したり、特別なシェルに切り替えたりするのではなく、この種のことを支援するために設計されたbash機能の使用を常に学びたいと思っています。そうすれば、リモートマシンで同じ機能を使用したり、同僚の端末に座ったりする必要がある場合に使用できます。


ご提案ありがとうございます。問題は、たとえばプロジェクトフォルダーが変更されたり、新しいプロジェクトを開始したりするときに気にする別の設定をしたくないということです。問題は、端末が私の使用に反応するようにしたいということです。私の質問の主な部分は、何をすべきかを伝えるのではなく、私が使用するものから学んでほしいことです。私はCtrl-R機能が本当に好きです。それをありがとう!
kramer65


2

これを試してください...これは履歴ファイル内のすべてのコマンドで機能します...はCtrl+ と同じですが、Rより直感的だと思います:)

  1. 編集する /etc/inputrc

    sudo vim /etc/inputrc
  2. この2行をコメント解除または追加します

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. ログアウト/ログイン


その後、履歴にリストされているコマンドを書き込もうとします...

お気に入り...

ls -lah

書く

ls

を押す

Page UpまたはPage Dn、「ls」で始まるコマンドを検索して履歴ファイルをナビゲートする

すべてを正しく行った場合、コマンドが自動補完されるはずです...

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