端末バッファからの単語の自動補完

端末バッファからの単語の自動補完

vimやなどのエディタでは、 (vim) や(emacs)emacsなどのホットキーを使用して、同じバッファ内の他の単語を使用して現在の単語の自動補完を実行できます。C-pM-/

シェル内で同じ機能を実現することは可能ですか? 前のコマンドの出力にある単語が表示され、別のコマンドを入力するときにそれをすばやく自動補完したい場合。

わかりやすくするために、例を挙げます。

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

ここから、ホットキーを押して、入力内容を自動的に補完できるようにしたいと思いますsomething_with_a_pretty_long_name

編集: 残念。ファイル名の使用は、私が求めているものに対して不適切な例でした。次の 2 番目の例を検討してください。

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

単にターミナル バッファーに表示されたというだけで、「happ」を「happened」に自動補完できました。これで私が求めているものが明確になったと思います。

答え1

zsh短い答え: いいえ、やのような従来のシェルではそうではありません。bash通常、シェルとターミナルは異なるエンティティです。

長い答え: おそらく。典型的なのは、コマンドを入力して押すとEnter、シェルがフォーク指定されたコマンドを実行します。その後、シェルはいいえ何が起こっているのかわかりません。シェルは、端末に何が書き込まれるか、実行されたプログラムが何をしたか、他のプログラムを開始したか、端末に書き込んだかなどを認識しません。

この問題には 2 つの解決策があります:

  1. 実行したコマンドからのすべての出力をキャプチャし、何らかの方法で補完目的に使用します (実行することはできますが、おそらく実行すべきではありません)
  2. サポートされている別のターミナルを使用する「完了」「シェル バッファー」から。

2 の解決策としては、たとえば emacs を使用し、ターミナルから作業を完了するために通常どおり-multi-termを使用するだけです。他のターミナルでも同様の解決策が提供される場合があります。M/

しかし、このような補完は本当に必要でしょうか? 最近のシェル補完では、マニュアル ページ、コマンド、PID、ソケット、コマンド オプション、リモート システムからのファイル パスなど、さまざまな補完が可能です。これは、すでにユース ケースに十分である可能性がありますが、特定の問題に合わせて強化することもできます。

答え2

http://www.iterm2.com/#/section/features/オートコンプリート

iterm2 にはまさに必要なものが揃っています。残念ながら Mac 用です。

しかし、ターミナルなので、Linux/Unix に SSH 接続でき、引き続き動作します。

答え3

これは次のように行うことができますエキストラクトtmux を使用して出力をキャプチャし、fzf であいまい選択できるようにします。

エキストラクト

答え4

これはおそらくあなたが期待する答えではないかもしれませんが、あなたのニーズの一部には役立つかもしれません。

TAB キーを使用すると、$PATH にあるコマンド (または内部コマンド) を自動補完できます。したがって、ファイル名が実行可能ファイルで、$PATH 内にある場合は、自動補完されます。

実行可能でないファイル名を自動補完したい場合は、" ." -dot、スペース (またはドットの代わりになる文字)、ファイル名の一部、および TAB を入力します。この方法では、シェルを騙して、コマンドを実行し、ファイル名をコマンドの引数として指定していると信じ込ませます。TAB を押すとファイル名が自動補完されますが、先頭のドットとスペースを削除する必要があるかもしれません。

もう一つの可能​​性は、BASH 補完機能ファイル名だけでなく、他のものも自動補完できます。

関連情報