Autocompletar en el cliente de línea de comandos de MySQL

81

En Linux, y muchos otros sistemas, cuando navega por la terminal puede presionar Tabpara completar automáticamente un directorio o nombre de archivo.

Me pregunto si hay algo así en la terminal MySQL. Por ejemplo, si quiero obtener la descripción de someTableWithRidiculousLongName, podría escribir describe someTableWentonces Taby autocompletaría el resto.

¿Existe algo así en la terminal MySQL?

Alan B. Dee
fuente
2
Pruebe mycli, github.com/dbcli/mycli
CodyChan

Respuestas:

122

Edite o cree un archivo llamado .my.cnfen su directorio de inicio, que contenga:

[mysql]
auto-rehash
T Zengerink
fuente
@galarant no necesariamente, es mejor que sea opcional
rkmax
2
@rkmax: todavía es opcional con la --disable-auto-rehashbandera. Pero ahora lo ha activado de forma predeterminada.
T Zengerink
3
Pero no funciona cuando escribo los comandos en minúscula.
alhelal
84

Para habilitar el autocompletado dentro del indicador de MySQL, escriba:

mysql> \#

Después de eso, puede escribir:

mysql> describe someTableW[TAB]

Llegar:

mysql> describe someTableWithRidiculousLongName
catmantiger
fuente
7
¿Por qué ese no es el predeterminado?
Oussama Elgoumri
1
simple y elegante
sp1rs
1
mysql> rehash - Como alternativa a "\ #", también podemos escribir el comando mysql "rehash" de la siguiente manera. Pensar en compartir como "refrito" puede ser más fácil de recordar para algunas personas como yo: ¡ mysql> rehash Después de eso, el autocompletado comenzará a funcionar!
janeshs
1
@OussamaElgoumri Porque a algunos de nosotros nos gusta pegar consultas complejas en la línea de comandos, y estas consultas pueden contener tabulaciones para la sangría.
alexg
61

Inicie la consola MySQL con una opción adicional --auto-rehash, es decir

mysql --auto-rehash -u root -p
rabudde
fuente
7
¡No sé por qué eso no funciona para mí! la pestaña se interpreta solo como una pestaña y no hace nada para la finalización automática.
Praveen Puglia
7
@pjp - Esta característica no funciona en compilaciones normales de Windows
Álvaro González
1
Precaución, tabcomplete solo funciona después de que uno está conectado a una base de datos como Otheus señaló en unix.stackexchange.com/questions/270309/…
Simeon
19

Sé que esta es una pregunta antigua, pero he encontrado un cliente cli MySql muy útil con autocompletado avanzado: mycli . Es mucho más inteligente que la función de repetición automática incorporada.

mateuszlewko
fuente
6
¡Excelente alternativa!
Kraxor
3
Oh sí, respuesta de primera categoría
smac89
1
auto-rehashno funciona en el mío. Cambié a mycli y boom ... funcionó como un profesional.
Rajesh Chaudhary
3

En OS X 10.11.6 configuré --auto-rehash como se describió anteriormente, pero no funcionó. (Este es OS X, por lo que mysql está compilado con la biblioteca libedit de BSD ).

Luego recordé que había establecido combinaciones de teclas vi para el cliente mysql creando ~ / .editrc, que contiene una línea: bind -v . Esto funciona muy bien para brindarme una navegación similar a vi en el cliente mysql, pero rompió la finalización del nombre de la columna (pude verificar esto eliminando .editrc ).

Así que investigué un poco y descubrí que ~ / .editrc debería tener al menos las siguientes líneas:

bind -v
bind \\t rl_complete

Con esta línea adicional, la finalización de nombres funciona correctamente en mysql Y la navegación similar a vi también funciona. (Hay otras configuraciones .editrc que mejoran en gran medida la navegación del cliente mysql, pero este no es el lugar para comenzar ese hilo de discusión).

pob
fuente
2

Algunas notas sobre el refrito automático:

Cuando habilita el autocompletado editando el archivo de configuración de mysql ..

[mysql]
auto-rehash

Puede hacerlo para todos los usuarios o solo para un usuario:

/etc/my.cnf: Todos los usuarios

~/.my.cnf: Usuario real

También puede deshabilitar el autocompletado agregando:

no-auto-rehash

Extraído de: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

Roderick Decker
fuente
1

También puede completar automáticamente según el historial de comandos. Empiece a escribir, luego invoque las claves vinculadas a ed-search-prev-historyy ed-search-next-history. Esto se aplica si mysql viene con soporte libedit. Las combinaciones de teclas predeterminadas son Ctrl-P y Ctrl-N, pero esto se puede personalizar en .editrc. Mi ejemplo para Ctrl-up y 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

Anteriormente, mysql se basaba en readline, y luego history-search-backwardy history-search-forwardson los comandos correctos. La configuración entonces fue mediante .inputrc. Mismo ejemplo que el anterior:

# 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

Entonces, digamos que comenzó a escribir sele invocó Ctrl-Up, select * from some_long_table_nameaparecería si ese es un comando que he usado anteriormente.

hasta
fuente