MySQL命令行客户端中的自动补全


81

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

我想知道MySQL终端中是否有类似的东西。例如,如果我想获得对someTableWithRidiculousLongName我的描述,则可以输入describe someTableWthen Tab,它将自动完成其余的内容。

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


2
尝试mycli,github.com
dbcli /

Answers:


122

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

[mysql]
auto-rehash

@galarant不一定,它最好是可选的
rkmax 2014年

2
@rkmax-该--disable-auto-rehash标志仍然是可选的。但是现在您已默认打开它。
T Zengerink 2014年

3
但是,当我以小写字母键入命令时,它不起作用。
alhelal

84

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

mysql> \#

之后,您可以输入:

mysql> describe someTableW[TAB]

要得到:

mysql> describe someTableWithRidiculousLongName

7
为什么那不是默认值?
Oussama Elgoumri 2015年

1
简单而优雅
sp1rs

1
mysql> rehash -作为“ \#”的替代,我们还可以按如下方式键入“ rehash” mysql命令。对于像我这样的某些人来说mysql> rehash ,将共享称为“重新哈希”可能更容易记住: 自动填充功能将开始起作用!
janeshs '18

1
@OussamaElgoumri因为我们中有些人喜欢将复杂的查询粘贴到命令行中,所以这些查询可能包含用于缩进的制表符。
alexg



3

在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客户端导航,但这不是开始讨论该话题的地方。)



1

您还可以根据命令历史记录自动完成。开始输入,然后调用绑定到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-backwardandhistory-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如果这是我之前使用的命令,则会出现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.