2012-05-30 29 views
6

我在OSX的Terminal.app中的Bash中使用Mysql的命令行客户端在Screen/Tmux中。 当使用箭头向上重新显示以前运行的查询时,多于在线时,AND当光标位于终端的最后一行时,mysql命令历史记录中的命令将被截断或截断。当我使用相同的工具,我的Ubuntu工作站上这从未发生过mysql客户端中的命令历史记录只显示多行查询的最后一行

这里发生了什么的直观表示:

输入一些查询;这里没有错。

+-------------------------------------------+ 
|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

+1优秀的问题插图。但抱歉,不知道如何帮助这个。祝你好运。 – shellter

+1

如果它真的影响'tmux'和'screen',它可能是由'libreadline'或'mysql'客户端本身的一些错误或版本不兼容引起的。你有没有尝试更新? 如果是这样,你现在可以检查env的值。 tmux'会话中的变量TERM与支持的终端类型列表进行比较 - 并在必要时对其进行调整。 – mjhennig

回答

9

您有几种选择,我能想到的,使你的生活在这方面更容易:

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

    这与set horizontal-scroll-mode On,readline相结合,您在~/.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 
    

    (有些系统,OSX 10.5某些我认为使用libedit代替readline的,在这种情况下,你需要把它们都放在~/.editrc,如果你不知道你的系统发出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-_撤消


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

    最后,mysql还为您提供\e command,它允许您在通用文件编辑器中编辑您的命令,如果vi或emacs不是您的东西,请尝试使用nano,这很容易并且效果很好。使用这个的主要缺点是,当滚动新行被忽略时,bu标签和空格不是。这是一个unix的唯一的东西,但OS X应该做的很好,无法检查,因为我没有任何苹果电脑,对不起。 :)

    为了更方便地使用此命令,您可以在~/.inputrc (例如, Control-o: "\\e;\n"会将CONTROL-o绑定到\ e;随后输入即时执行。 (看Keybindings Section

  • 使用备用外壳: 如altSQL:它提供了语法着色,美观大方的历史滚动和其他一些细微,大的好处是,你有来源,以便你能适应你想要什么。

  • 下降壳去GUI: 最后,我想插好的MySQL workbench对你的数据库的工作,它是跨平台的,免费的,在我的愚见一个很好的工具一起工作。

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

+0

非常棒的答案!有多种选择可供选择!我会检查这是否解决了我的问题。 – klokop

相关问题