web-dev-qa-db-ja.com

OS XでCTRL-rが奇妙に動作する(コマンドの一部のみを表示する)のはなぜですか

Ctrl+r.bash_historyで以前に実行したコマンドを検索するための優れた小さなツールです。

しかし、OS X Terminal.appで使用すると、奇妙な動作が見られ、他の誰かが同じものを見たり、修正する方法を知っているのではないかと思っていました。

  1. Ctrl+r
  2. findのように入力します
  3. かっこいい、見て...それは私が欲しかったコマンドですfind . -exec grep -q "hello world" '{}' \; -print
  4. そのコマンドを実行したいのですが、helloworldを別のものに変更します。
  5. だから私はヒットしました  または 
  6. これで、コマンドはコマンドラインでSORTAになりますが、コマンド全体がそこにある-q "blog_posts_by" '{}' \; -printのように、常にコマンドの切り捨てられたバージョンのように見えます。カーソルキーを使用して行を移動できます。 、ただし、すべてが印刷されるわけではありません。行に表示されているものと、端末が実際に編集していると考えているものとの間には、断絶があります。

なぜこれが起こるのか誰かが手がかりを持っていますか?ウェブを検索するのは簡単な現象ではありません。

10
bryan kennedy

プロンプト内の色のエスケープシーケンスが適切に区切られていない可能性があります。それらは\[\]で囲む必要があります。

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

印刷されない文字シーケンスの長さは、このように囲まれている場合、プロンプトの長さに含まれません。前のコマンドの位置は、折り返されているときに正しく表示されるように計算する必要があります。

この問題のもう1つの考えられる原因は、間違ったTERM値を持っていることです。たとえば、これはPS1で色を使用していたときに発生しましたが、TERMxtermに設定されていました。 xterm-256colorに変更すると、CTRL-rが再び正しく機能し始めました。

0
Tony

これは、ターミナルでのエスケープキーの構成方法が原因である可能性があります。私は通常、iTermまたはTerminal.appの左矢印または右矢印を使用します。これは、すぐにリターンキーを押すのが好きではないためです。 ?

0
lynxman