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

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

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

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

【问题讨论】:

标签: mysql autocomplete console


【解决方案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
        

        【讨论】:

        猜你喜欢
        • 2018-04-27
        • 2019-08-05
        • 2011-09-19
        • 2016-02-24
        • 2010-10-30
        • 2021-08-08
        • 2018-06-24
        • 2018-06-14
        • 1970-01-01
        相关资源
        最近更新 更多