6

OSXのTerminal.appのBashから、Screen/TmuxでMysqlのコマンドラインクライアントを使用しています。上向き矢印を使用して、オンラインよりも多くの範囲にまたがる以前に実行されたクエリを再表示する場合、およびカーソルがターミナルの最後の行にある場合、mysqlのコマンド履歴のコマンドは「切り捨て」または切断されます。Ubuntuワークステーションで同じツールを使用すると、これは発生しません。

これが何が起こるかを視覚的に表したものです。

クエリを入力します。ここでは何も悪いことはありません。

+-------------------------------------------+
|mysql>                                     |
|mysql>                                     |
|mysql>                                     |
|mysql>select * from tables where legs = 4 a|
|nd colour = 'green';                       |
+-------------------------------------------+

それを実行すると、結果が表示されます:

+-------------------------------------------+
|| 2 | ....... | ..... |                    |
|+---+---------+-------+                    |
| x rows in set (0.00 sec)                  |
|                                           |
|mysql>                                     |
+-------------------------------------------+

[上矢印]を押して最後のクエリを再表示すると、次のようになります。

+-------------------------------------------+
|| 2 | ....... | ..... |                    |
|+---+---------+-------+                    |
| x rows in set (0.00 sec)                  |
|                                           |
|nd colour = 'green';                       |
+-------------------------------------------+

もう一度[上矢印]を押すと、次のようになります。

+-------------------------------------------+
|| 2 | ....... | ..... |                    |
|+---+---------+-------+                    |
| x rows in set (0.00 sec)                  |
|mysql>select * from tables where legs = 4 a|
|nd colour = 'green';                       |
+-------------------------------------------+

設定を変更することで解決できますか?それともMysqlのクライアントのバグですか?

ソフトウェアバージョン:

OSX 10.7.3
Terminal Version 2.2.2 (303)
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
mysql  Ver 14.14 Distrib 5.5.19, for osx10.7 (i386) using readline 5.1
Screen version 4.00.03 (FAU) 23-Oct-06
tmux 1.6
4

1 に答える 1

11

この点であなたの人生を楽にするために私が考えることができるいくつかのオプションがあります:

  • mysql オプションと組み合わせた readline コマンド: readline は、基本的な emacs コマンド(vi にも設定可能) と同様のコマンドを受け入れるか、たとえば CTRL-a で行頭に戻ります。

    これを で設定しset horizontal-scroll-mode Onreadlineと組み合わせると、~/.inputrc入力を 1 行で取得し、カーソルを最後に置くことができます。CTRL-a と組み合わせると、すぐに先頭にジャンプし、非常に便利です。

    ~/.inputrc:

    $if Mysql
        set horizontal-scroll-mode On`
        # uncomment the commands below to use vi keybindings
        #set keymap vi
        #set editing-mode vi
    $endif
    

    ~/.editrc(一部のシステム、OSX 10.5は確かにreadlineの代わりにlibeditを使用していると思います。その場合、システムがコマンドを発行するかどうかわからない場合は、すべてをに入れる必要がありますmysql --version

    発行したコマンドを探すには、 もありCTRL-r、用語を入力すると、履歴から最後の出現が検索されます。

    興味深いコマンドは次のとおりです。

    • CTRL-P 履歴の前のコマンドに移動
    • CTRL-N 履歴の次のコマンドに移動
    • CTRL-R 履歴を逆検索
    • CTRL-S 履歴を前方に検索
    • CTRL-A カーソルを行頭に移動
    • CTRL-E カーソルを行末に移動
    • CTRL-W 単語を後方に削除
    • ALT-D 単語を前方に削除
    • CTRL-F カーソルを 1 文字前方に移動
    • CTRL-B カーソルを 1 文字後方に移動
    • ALT-F カーソルを 1 単語進む
    • ALT-B カーソルを 1 単語後方に移動
    • ALT-_ 元に戻す


    ただし、シェルとその基盤によっては、すべてが機能しないか、傍受されるとは限りません。たとえば、kde で使用している Konsole では、高度な設定でフロー制御を無効にして、特に CTRL-s を許可する必要がありました。

    最後に、mysql は\e コマンドも提供します。これにより、一般的なファイル エディターでコマンドを編集できます。vi や emacs が気に入らない場合は、nano を試してみてください。簡単でうまく機能します。これを使用する主な欠点は、上にスクロールするときに、改行は無視されますが、タブとスペースは無視されることです。これは unix のみの機能ですが、OS X では問題なく動作するはずです。Apple コンピューターを所有していないため、確認できません。申し訳ありません。:)

    このコマンドをより簡単に使用するには、readline 文字列マクロを入れることができます。~/.inputrc たとえばControl-o: "\\e;\n"、CONTROL-o を \e にバインドします。すぐに実行するにはEnterキーを押します。(キーバインドセクションを見てください)

  • altSQLなどの代替シェルを使用します。これにより、構文の色付け、素敵な履歴のスクロール、その他の機能が提供されます。大きなボーナスは、ソースがあるため、必要なものを適応させることができることです。

  • シェルをドロップして GUI に移行: 最後に、優れたMySQL ワークベンチをプラグインしてデータベースで動作させたいと思います。これはクロスプラットフォームで、無料で、私の謙虚な意見では、使用するのに優れたツールです。

これは完璧な解決策ではなく、それぞれに長所と短所があることは承知していますが、これが少しでもお役に立てば幸いです。

于 2012-06-15T01:42:33.163 に答える