mysql客户端中的命令历史记录仅显示多行查询的最后一行

时间:2012-05-30 08:58:20

标签: mysql osx-lion readline gnu-screen tmux

我在Screen / Tmux中使用Mysql的命令行客户端,来自OSX的Terminal.app中的Bash。 当使用向上箭头重新显示以前运行的跨越多行的查询时,当光标位于终端的最后一行时,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

1 个答案:

答案 0 :(得分:10)

在这方面,您可以考虑一些让我们的生活更轻松的选择:

  • readline命令与mysql选项结合: readline接受类似于basic emacs commands的命令(也可以设置为vi),或者示例CTRL-a返回到行的开头。

    这与您在set horizontal-scroll-mode On中设置的~/.inputrcreadline相结合,可以让您输入一条直线,将光标放在最后。将它与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
    

    (某些系统,OSX 10.5,我相信使用libedit而不是readline,在这种情况下你需要把它全部放在~/.editrc,如果你不确定你的系统问题是{{1} }命令)

    要查找您发出的命令,您还可以使用mysql --version,这样您就可以输入一个字词,并搜索您的历史记录以查找最后一次出现。

    有趣的命令是:

    • CTRL-P转到历史记录中的上一个命令
    • CTRL-N转到历史记录中的下一个命令
    • CTRL-R反向搜索您的历史记录
    • CTRL-S向前搜索历史
    • CTRL-A将光标移动到行的开头
    • CTRL-E将光标移动到行尾
    • CTRL-W向后删除Word
    • ALT-D删除前进单词
    • CTRL-F移动光标前进1个字符
    • CTRL-B将光标向后移动1个字符
    • ALT-F将光标向前移动1个字
    • ALT-B将光标向后移动1个字
    • ALT-_撤消


    根据您的shell和底层,它们可能不会全部工作或被拦截。例如我在kde上使用的Konsole,我不得不在高级设置中禁用流量控制以允许CTRL-s等。

    最后,mysql还为你提供\e command,它允许你在常规文件编辑器中编辑你的命令,如果vi或emacs不是你的东西,尝试nano,它很容易并且运行良好。使用它的主要缺点是,当向上滚动换行符时,忽略选项卡和空格。这是一个unix唯一的东西,但OS X应该在那里做得很好,不能检查,因为我没有任何Apple电脑,对不起。 :)

    为了更轻松地使用此命令,您可以在CTRL-r中放置一个readline字符串宏 例如~/.inputrc会将CONTROL-o绑定到\ e;然后输入以立即执行。 (查看Keybindings Section

  • 使用备用shell : 例如altSQL:它提供了语法着色,漂亮的历史滚动和其他一些细节,大的好处是你有源,所以你可以适应你想要的。

    < / LI>
  • 删除shell并转到GUI : 最后,我想插入好的MySQL workbench来处理您的数据库,它是跨平台的,免费的,并且在我看来是一个很好的工具。

我意识到这不是一个完美的解决方案,每个都有优点和缺点,但我希望这对你有所帮助。