vim
などのエディタでは、(vim)や(emacs)などのショートカットを使用して、同じバッファ内の別の単語を使用して現在の単語のオートコンプリートを実行できますemacs
。C-p
M-/
シェルで同じ機能を達成することは可能ですか?前のコマンドの出力にいくつかの単語が表示され、他のコマンドを入力している間にその単語をすばやく自動補完したいと思います。
明確にするために、例えば、
$ 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」を「起きた」に自動補完できます。これが私が求めていることが明確になることを願っています。
答え1
短い答え:いいえ、クラシックシェルには当てはまりません。通常、zsh
シェルbash
と端末は異なるエンティティであるためです。
長い答え:おそらく。通常、コマンドを入力してキーを押しますEnter。これはシェルです。フォークそして指定されたコマンドを実行します。それから殻にいいえ何が起こっているのかを知ると、シェルはターミナルや他のものに書き込む他のプログラムを起動した場合、ターミナルに何を書くのか、実行されたプログラムが何をしているのかわかりません。
問題に対する考えられる解決策は2つあります。
- 実行されたコマンドのすべての出力をキャプチャし、目的を達成するために何らかの方法で使用します(完了できますが実行しないでください)。
- 他の端末サポートを使用「町田」「シェルバッファ」から。
2の解決策は、たとえばemacsを使用し、通常は端末で作業しているかのようにmulti-term
使用することMです。/他の端末でも同様のソリューションを提供できます。
ところで、この仕上げが必須ですか?これで、シェルの完成により、マニュアルページ、コマンド、PID、ソケット、コマンドオプション、リモートシステムのファイルパスなどを完了できます。これはあなたのユースケースに十分であるかもしれませんし、特定の問題に合わせて改善されるかもしれません。
答え2
http://www.iterm2.com/#/section/features/autocomplete
iterm2があなたに必要なものです。残念ながら、Macでは動作します。
しかし、ターミナルなので、linux / unixにsshを介して接続できますが、それでも機能します。
答え3
あなたはこれを行うことができます加えたtmuxを使用して出力をキャプチャし、fzfを使用してファジー選択を行うことができます。
答え4
これはあなたが期待した答えではないかもしれませんが、いくつかの要件を満たすことができます。
TAB を使用して $PATH のコマンド (または内部コマンド) をオートコンプリートできるため、ファイル名が実行可能で、$PATH にある場合はオートコンプリートされます。
実行できないファイル名をオートコンプリートするには、 " .
"(ドット、スペース(またはドットの代わりに何も))、ファイル名、タブ部分を入力します。これにより、コマンドを実行していると信じ、ファイル名をコマンドの引数として渡すようにシェルをだますことができます。 Tabキーを押すとファイル名が自動的に完成しますが、前のドット+スペースを削除する必要があるかもしれません。
もう1つの可能性は、以下を使用することです。BASH完了機能。これは、単純なファイル名以上の場合に自動的に実行できます。