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-history
和ed-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-backward
和history-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 命令行自动完成