如何配置 MySQL 命令行客户端键绑定?

如何配置 MySQL 命令行客户端键绑定?

我经常在 Ubuntu 机器上使用 mysql 命令行客户端。它工作正常,只是按键绑定错误。具体来说,按“Home”、“End”或“Delete”会使其输出 ~(波浪号)字符并发出哔哔声。

我已确定 Home/End 可以通过分别按 Control+A 和 Control+E 来完成,就像在 Mac 终端上一样。我在 Windows 机器上,使用 PuTTY 与 Ubuntu 通信,但 home/end/delete 键在常规命令行上工作正常。我很确定这是 mysql 客户端特有的问题。

我检查了手册文件,但没有找到任何有用的东西。有没有办法将 Home/End/Delete 键绑定到它们的实际功能?也许是我的主目录中的配置文件或类似的东西?

每次我向后移动几个空格来编辑查询并按下删除键时,我最终都必须再次向前移动,这样我就可以使用退格键不仅删除不正确的查询,还可以删除删除键输入的~。

它正在慢慢地把我逼疯。我告诉你,我疯了。疯狂!

答案1

好的,我注意到我的家庭服务器没有问题,通过比较工作服务器和家庭服务器,我最终确定了问题所在。

这是 Ubuntu 9.10 版本中引入的一个错误,我的工作服务器正在运行该版本。具体来说,Ubuntu 9.10 中的 /usr/bin/mysql 版本使用 EditLine 包装器而不是 readline 包装器:

wmartin@work:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a

mysql  Ver 14.14 Distrib 5.1.37, for debian-linux-gnu (i486) using EditLine wrapper

e23604381e64ac805fdbb8b334ce4d17  /usr/bin/mysql

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 9.10
Release:        9.10
Codename:       karmic

与我家服务器上的最新版本进行比较:

wmartin@home:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a

mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (i486) using readline 6.1

4274c43798239142576e77c022d35bd1  /usr/bin/mysql

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.2 LTS
Release:        10.04
Codename:       lucid

10.04(以及可能更高版本)运行良好 - mysql 使用 Putty 的默认设置遵守 home/end/delete 键。

因此,解决方案要么是将服务器升级到 10.04 或更高版本,要么使用命令行实用程序rlwrap将 mysql 客户端包装在 readline 环境中,如博客文章中所述恢复 Ubuntu 9.10(Karmic Koala)MySQL 客户端的 readline 功能

遗憾的是,这种rlwrap方法有一个令人讨厌的副作用,就是当你输入密码时,密码会显示出来,而不是隐藏其输出。所以我想我会选择升级路线。

答案2

我认为问题出在您的 PuTTY 设置上 - 在连接窗口的“终端”、“键盘”下 - 将“Home 和 End 键”选项更改为rxvt。不完美(End 仍然不起作用)但您会得到 Home 和 Delete。

我认为真正的解决方案是使用适当的终端和适当的 SSH;控制台2对于终端来说相当不错,并且 MSYS 或 Cygwin 可以为您提供 SSH(msysgit 已包含它)。

编辑

听起来你已经发现了 MySQL CLI 中的错误。

相关内容