2011-11-30 101 views
57

在Linux和许多其他系统,导航终端时,您可以按Tab键自动完成一个目录或文件名。自动完成在MySQL命令行客户端

我想知道是否有像在MySQL的终端东西。例如,如果我想要得到的someTableWithRidiculousLongName说明我可以输入describe someTableW然后标签,它会自动完成剩下的。

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

+1

尝试mycli,https://github.com/dbcli/mycli – CodyChan

回答

100

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

[mysql] 
auto-rehash 
+8

这是比接受的更好的答案 – galarant

+0

@galarant不一定,最好是可选 – rkmax

+2

@rkmax - 它仍然是可选用'--disable-auto-rehash'标志。但现在你已经默认打开了它。 –

54

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

mysql --auto-rehash -u root -p 
+5

我dnt知道为什么这不适合我!该选项卡仅被解释为一个选项卡,并且对自动完成没有任何作用。 –

+7

@pjp - 此功能[不适用于常规Windows版本](http://stackoverflow.com/questions/269653/autocomplete-in-mysql-under-windows) –

+0

谢谢!有很好的解释 –

65

到MySQL提示符下键入内启用自动完成:

mysql> \# 

之后,您可以键入:

mysql> describe someTableW[TAB] 

要获取:

mysql> describe someTableWithRidiculousLongName 
+5

为什么这不是默认? –

+1

非常简单... – SYNCRo

+0

简洁优雅 – sp1rs

1

您也可以自动完成基于命令历史记录。开始输入,然后调用绑定到ed-search-prev-historyed-search-next-history的密钥。这适用于MySQL带有libedit支持的情况。默认的键盘绑定是Ctrl-P和Ctrl-N,但可以在.editrc中自定义。我的键为Ctrl +向上和Ctrl-下来例如:

# 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-向上,select * from some_long_table_name会来,如果这是我刚才使用的命令。

1

有关自动翻版一些注意事项:

当您启用自动完成编辑MySQL的配置文件..

[mysql] 
auto-rehash 

您可以为所有用户或只为一个用户做到这一点:

/etc/my.cnf:所有用户

~/.my.cnf:实际用户

您还可以禁用自动补加:http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

2

在OS X 10.11:

no-auto-rehash 

摘自。6我如上所述设置了--auto-rehash,但它不起作用。 (这是OS X因此MySQL与BSD libedit库编译。)

然后我记得,我已经通过创建〜/ .editrc设置VI键绑定为MySQL客户端,包含一个行:绑定 - v。这很适合在mysql客户端中给我vi类导航,但是它破坏了列名完成(我可以通过删除.editrc来验证这一点)。

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

bind -v 
bind \\t rl_complete 

有了这个附加线路,名完成正常工作的MySQL和六样,导航功能也。 (还有其他的.editrc设置可以大大提高mysql客户端的导航,但这不是开始讨论的主题的地方。)

+0

感谢您的支持! – grocky

6

我知道这是一个老问题,但我发现非常有帮助MySql cli具有高级自动完成功能的客户端: mycli。它比内建的自动重新刷新功能更加智能。

+0

优秀的替代品! – kraxor