6

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

点击 [arrow-up] 重新显示最后一个查询给我留下了:

+-------------------------------------------+
|| 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客户端的bug?

软件版本:

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

在这方面,你有几个我能想到的让你的生活更轻松的选择:

  • readline 命令与 mysql 选项相结合: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
    

    (某些系统,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-_撤消


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

    最后 mysql 还为您提供了\e 命令,该命令允许您在通用文件编辑器中编辑命令,如果您不喜欢 vi 或 emacs,请尝试 nano,它很简单而且效果很好。使用它的主要缺点是,当向上滚动换行时,制表符会被忽略,而空格则不会。这只是一个 unix 的东西,但 OS X 应该在那里做得很好,因为我没有任何苹果电脑,所以无法检查,抱歉。:)

    为了更容易地使用这个命令,您可以在其中放入一个 readline 字符串宏,~/.inputrc 例如Control-o: "\\e;\n"将 CONTROL-o 绑定到 \e; 然后输入以立即执行。(查看键绑定部分

  • 使用备用外壳:例如altSQL:它提供语法着色、漂亮的历史滚动和其他一些细节,最大的好处是您拥有源代码,因此您可以调整您想要的内容。

  • 放下外壳并使用 GUI:最后,我想插入漂亮的MySQL 工作台来处理您的数据库,它是跨平台的、免费的,并且在我看来是一个不错的工具。

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

于 2012-06-15T01:42:33.163 回答