Autocompletion in the MySQL command-line client

后端 未结 7 1786
半阙折子戏
半阙折子戏 2020-12-22 16:44

In Linux, and many other systems, when navigating the terminal you can press Tab to auto complete a directory or file name.

I\'m wondering if there is any

相关标签:
7条回答
  • 2020-12-22 17:08

    On OS X 10.11.6 I set --auto-rehash as described above, but it did not work. (This is OS X so mysql is compiled with the BSD libedit library.)

    Then I remembered that I had set vi key-bindings for mysql client by creating ~/.editrc, containing one line: bind -v. This works great for giving me vi-like navigation in mysql client, but it broke column name completion (I was able to verify this by removing .editrc).

    So I researched a little bit and found that ~/.editrc should have at least the following lines:

    bind -v
    bind \\t rl_complete
    

    With this additional line, name completion works correctly in mysql AND vi-like navigation works also. (There are other .editrc settings which greatly improve mysql client navigation, but this isn't the place to start that thread of discussion.)

    0 讨论(0)
  • 2020-12-22 17:12

    start MySQL console with additional option --auto-rehash, i.e.

    mysql --auto-rehash -u root -p
    
    0 讨论(0)
  • 2020-12-22 17:18

    Edit or create a file called .my.cnf in your home directory, containing:

    [mysql]
    auto-rehash
    
    0 讨论(0)
  • 2020-12-22 17:24

    To enable autocomplete within the MySQL prompt type:

    mysql> \#
    

    After that you can type:

    mysql> describe someTableW[TAB]
    

    To get:

    mysql> describe someTableWithRidiculousLongName
    
    0 讨论(0)
  • 2020-12-22 17:24

    I know this is an old question, but I've found very helpful MySql cli client with advanced autocompletion: mycli. It's much smarter than builtin auto-rehash feature.

    0 讨论(0)
  • 2020-12-22 17:24

    You can also auto-complete based on the command history. Start typing, then invoke the keys which are bound to ed-search-prev-history and ed-search-next-history. This applies if mysql comes with libedit support. The default keybindings are Ctrl-P and Ctrl-N, but this can be customized in .editrc. My example for Ctrl-up and 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
    

    Previously, mysql was based on readline, and then history-search-backward and history-search-forward are the correct commands. Configuration then was by means of .inputrc. Same example as above:

    # 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
    

    So, say you started typing sel and invoke Ctrl-Up, select * from some_long_table_name would come up if that is a command I have used earlier.

    0 讨论(0)
提交回复
热议问题