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?


Respuestas:


122

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

[mysql]
auto-rehash

@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

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

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


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.


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).


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.