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

klo*_*kop 6 mysql gnu-screen readline tmux osx-lion

我在Screen/Tmux中使用Mysql的命令行客户端,来自OSX的Terminal.app中的Bash.当使用向上箭头重新显示以前运行的跨越多行的查询时,当光标位于终端的最后一行时,mysql命令历史记录中的命令被"截断"或截断.当我在Ubuntu工作站上使用相同的工具时,这种情况永远不会发生

以下是所发生情况的直观表示:

输入一些查询; 没错.

+-------------------------------------------+
|mysql>                                     |
|mysql>                                     |
|mysql>                                     |
|mysql>select * from tables where legs = 4 a|
|nd colour = 'green';                       |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

运行它,结果显示:

+-------------------------------------------+
|| 2 | ....... | ..... |                    |
|+---+---------+-------+                    |
| x rows in set (0.00 sec)                  |
|                                           |
|mysql>                                     |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

按[向上箭头]重新显示上一个查询会让我:

+-------------------------------------------+
|| 2 | ....... | ..... |                    |
|+---+---------+-------+                    |
| x rows in set (0.00 sec)                  |
|                                           |
|nd colour = 'green';                       |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

再次点击[向上箭头],我得到:

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

可以通过更改设置来解决吗?或者它是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
Run Code Online (Sandbox Code Playgroud)

Har*_*hof 10

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

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

    这与您设置set horizontal-scroll-mode On读取线相结合,~/.inputrc允许您将输入放在一条直线上,将光标放在最后.将它与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
    
    Run Code Online (Sandbox Code Playgroud)

    (某些系统,OSX 10.5,我相信使用libedit而不是readline,在这种情况下你需要全部放入~/.editrc,如果你不确定你的系统发出mysql --version命令)

    要查找您发出的命令,您还CTRL-r可以输入一个术语,并搜索您的历史记录以查找最后一次出现的命令.

    有趣的命令是:

    • CTRL-P转到历史记录中的"上一个"命令
    • CTRL-N转到历史记录中的Next命令
    • 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命令,它允许你在常规文件编辑器中编辑你的命令,如果vi或emacs不是你的东西,尝试nano,它很容易并且运行良好.使用它的主要缺点是,当向上滚动换行符时,忽略选项卡和空格.这是一个unix唯一的东西,但OS X应该在那里做得很好,不能检查,因为我没有任何Apple电脑,对不起.:)

    为了更容易使用此命令,您可以将readline字符串宏放入~/.inputrc 例如Control-o: "\\e;\n"将CONTROL-o绑定到\ e; 然后输入即时执行.(看看Keybindings部分)

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

  • 删除shell并转到GUI:最后我想插入漂亮的MySQL工作台来处理你的数据库,它是跨平台的,免费的,并且在我看来是一个很好的工具.

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