MySQL 命令行客户端中的自动完成

Posted

技术标签:

【中文标题】MySQL 命令行客户端中的自动完成【英文标题】:Autocompletion in the MySQL command-line client 【发布时间】:2012-01-10 01:35:32 【问题描述】:

在 Linux 和许多其他系统中,当导航终端时,您可以按 Tab 来自动完成目录或文件名。

我想知道 mysql 终端中是否有类似的东西。例如,如果我想获得someTableWithRidiculousLongName 的描述,我可以输入describe someTableW 然后Tab,它会自动完成其余的。

MySQL 终端中是否存在类似的东西?

【问题讨论】:

试试 mycli,github.com/dbcli/mycli 【参考方案1】:

我知道这是一个老问题,但我发现具有高级自动完成功能的 MySql cli 客户端非常有用: mycli。它比内置的自动重新散列功能要聪明得多。

【讨论】:

优秀的替代品! 哦,是的,一流的答案 auto-rehash 不适用于我的。切换到 mycli 和繁荣....像专业人士一样工作。【参考方案2】:

在 OS X 10.11.6 上,我如上所述设置了 --auto-rehash,但它不起作用。 (这是 OS X,所以 mysql 是用 BSD libedit 库编译的。)

然后我记得我通过创建 ~/.editrc 为 mysql 客户端设置了 vi 键绑定,其中包含一行:bind -v。这非常适合在 mysql 客户端中为我提供类似 vi 的导航,但它破坏了列名完成(我能够通过删除 .editrc 来验证这一点)。

于是我研究了一下,发现~/.editrc 至少应该有以下几行:

bind -v
bind \\t rl_complete

有了这个额外的行,名称完成在 mysql 中可以正常工作,并且类似 vi 的导航也可以工作。 (还有其他 .editrc 设置可以极大地改善 mysql 客户端导航,但这不是开始讨论的地方。)

【讨论】:

【参考方案3】:

关于自动重新散列的一些注意事项:

当你启用自动完成编辑 mysql 配置文件时..

[mysql]
auto-rehash

您可以为所有用户执行此操作,也可以仅为一个用户执行此操作:

/etc/my.cnf:所有用户

~/.my.cnf: 实际用户

您也可以禁用自动补全添加:

no-auto-rehash

摘自:http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

【讨论】:

【参考方案4】:

您还可以根据命令历史记录自动完成。开始输入,然后调用绑定到ed-search-prev-historyed-search-next-history 的键。这适用于 mysql 带有 libedit 支持的情况。默认键绑定是 Ctrl-P 和 Ctrl-N,但这可以在 .editrc 中自定义。我的 Ctrl-up 和 Ctrl-down 示例:

# start typing, then press Ctrl-Up
bind "\e[1;5A" ed-search-prev-history
# start typing, then press Ctrl-Up, then Ctrl-Down
bind "\e[1;5B" ed-search-next-history

以前mysql是基于readline,然后history-search-backwardhistory-search-forward是正确的命令。然后通过.inputrc 进行配置。同上例:

# these are the key bindings for the readline library
# start typing, then press Ctrl-Up
"\e[1;5A": history-search-backward
# start typing, then press Ctrl-Up, then Ctrl-Down
"\e[1;5B": history-search-forward

所以,假设您开始输入 sel 并调用 Ctrl-Up,如果这是我之前使用的命令,则会出现 select * from some_long_table_name

【讨论】:

【参考方案5】:

要在 MySQL 提示符类型中启用自动完成功能:

mysql> \#

然后你可以输入:

mysql> describe someTableW[TAB]

获取:

mysql> describe someTableWithRidiculousLongName

【讨论】:

为什么这不是默认值? 简约优雅 mysql> rehash - 作为 "\#" 的替代,我们还可以键入 "rehash" mysql 命令,如下所示。对于像我这样的人来说,将分享作为“重新散列”的想法可能更容易记住:mysql> rehash 之后自动完成将开始工作! @OussamaElgoumri 因为我们中的一些人喜欢将复杂的查询粘贴到命令行中,而这些查询可能包含用于缩进的制表符。【参考方案6】:

在您的主目录中编辑或创建一个名为 .my.cnf 的文件,其中包含:

[mysql]
auto-rehash

【讨论】:

@galarant 不一定,最好是可选的 @rkmax - 它仍然是可选的 --disable-auto-rehash 标志。但现在你已经默认开启它了。 但是,当我用小写字母输入命令时它不起作用。【参考方案7】:

使用附加选项--auto-rehash 启动 MySQL 控制台,即

mysql --auto-rehash -u root -p

【讨论】:

我不知道为什么这对我不起作用!该选项卡仅被解释为一个选项卡,对自动完成没有任何作用。 @pjp - 这个功能does not work on regular Windows builds 注意,tabcomplete 仅在连接到数据库后才能工作,正如 Otheus 在unix.stackexchange.com/questions/270309/…中指出的那样

以上是关于MySQL 命令行客户端中的自动完成的主要内容,如果未能解决你的问题,请参考以下文章

自动完成命令行参数

Ajax 自动完成(或自动建议)与 TAB 完成/自动填充类似于 shell 命令行完成?

如何使用 vi 编辑器在 KornShell 命令行自动完成

如何使 python 命令行程序自动完成任意事物而不是解释器

mysql实用客户端—mycli

mysql实用客户端—mycli