Autocompletion im MySQL-Befehlszeilenclient

81

Unter Linux und vielen anderen Systemen können Sie beim Navigieren im Terminal drücken Tab, um ein Verzeichnis oder einen Dateinamen automatisch zu vervollständigen.

Ich frage mich, ob es so etwas im MySQL-Terminal gibt. Wenn ich zum Beispiel die Beschreibung von erhalten möchte, someTableWithRidiculousLongNamekönnte ich describe someTableWdann Tabeingeben und der Rest wird automatisch vervollständigt.

Gibt es so etwas im MySQL-Terminal?

Alan B. Dee
quelle
2
Versuchen Sie mycli, github.com/dbcli/mycli
CodyChan

Antworten:

122

Bearbeiten oder erstellen Sie eine Datei, die .my.cnfin Ihrem Home-Verzeichnis aufgerufen wird und Folgendes enthält:

[mysql]
auto-rehash
T Zengerink
quelle
@ Galarant nicht unbedingt, es ist besser optional
rkmax
2
@rkmax - Es ist immer noch optional mit der --disable-auto-rehashFlagge. Aber jetzt haben Sie es standardmäßig aktiviert.
T Zengerink
3
Aber es funktioniert nicht, wenn ich die Befehle in kleinen Buchstaben eingebe.
Alhelal
84

So aktivieren Sie die automatische Vervollständigung innerhalb der MySQL-Eingabeaufforderung:

mysql> \#

Danach können Sie Folgendes eingeben:

mysql> describe someTableW[TAB]

Bekommen:

mysql> describe someTableWithRidiculousLongName
catmantiger
quelle
7
Warum ist das nicht die Standardeinstellung?
Oussama Elgoumri
1
einfach und elegant
sp1rs
1
mysql> rehash - Alternativ zu "\ #" können wir auch den Befehl "rehash" mysql wie folgt eingeben. Der Gedanke, als "Aufwärmen" zu teilen, könnte für manche Leute wie mich leichter zu merken sein: mysql> rehash Danach beginnt die automatische Vervollständigung zu funktionieren!
Janeshs
@OussamaElgoumri Da einige von uns gerne komplexe Abfragen in die Befehlszeile einfügen und diese Abfragen möglicherweise Tabulatorzeichen zum Einrücken enthalten.
Alexg
61

Starten Sie die MySQL-Konsole mit einer zusätzlichen Option --auto-rehash, z

mysql --auto-rehash -u root -p
Rabudde
quelle
7
Ich weiß nicht, warum das bei mir nicht funktioniert! Die Registerkarte wird nur als Registerkarte interpretiert und dient nicht zur automatischen Vervollständigung.
Praveen Apulien
7
@pjp - Diese Funktion funktioniert nicht bei regulären Windows-Builds
Álvaro González
1
Achtung, tabcomplete funktioniert erst, nachdem eine Verbindung zu einer Datenbank hergestellt wurde, wie Otheus in unix.stackexchange.com/questions/270309/…
Simeon
19

Ich weiß, dass dies eine alte Frage ist, aber ich habe einen sehr hilfreichen MySQL-CLI-Client mit erweiterter automatischer Vervollständigung gefunden: mycli . Es ist viel intelligenter als die integrierte Auto-Rehash-Funktion.

mateuszlewko
quelle
6
Ausgezeichnete Alternative!
Kraxor
3
Oh ja, erstklassige Antwort
smac89
1
auto-rehashfunktioniert bei mir nicht Auf mycli und boom umgestellt .... hat wie ein Profi funktioniert.
Rajesh Chaudhary
3

Unter OS X 10.11.6 habe ich --auto-rehash wie oben beschrieben eingestellt, aber es hat nicht funktioniert. (Dies ist OS X, daher wird MySQL mit der BSD- Bibliothek libedit kompiliert .)

Dann erinnerte ich mich, dass ich vi-Schlüsselbindungen für den MySQL-Client festgelegt hatte, indem ich ~ / .editrc erstellte, das eine Zeile enthielt: bind -v . Dies funktioniert hervorragend, um mir eine vi-ähnliche Navigation im MySQL-Client zu ermöglichen, hat jedoch die Vervollständigung des Spaltennamens unterbrochen (ich konnte dies durch Entfernen von .editrc überprüfen ).

Also habe ich ein bisschen recherchiert und festgestellt, dass ~ / .editrc mindestens die folgenden Zeilen haben sollte:

bind -v
bind \\t rl_complete

Mit dieser zusätzlichen Zeile funktioniert die Namensvervollständigung in MySQL korrekt und die vi-ähnliche Navigation funktioniert auch. (Es gibt andere .editrc-Einstellungen, die die MySQL-Client-Navigation erheblich verbessern, aber dies ist nicht der richtige Ort, um diesen Diskussionsthread zu starten.)

pob
quelle
2

Einige Hinweise zur automatischen Wiederaufbereitung:

Wenn Sie die automatische Vervollständigung aktivieren, bearbeiten Sie die MySQL-Konfigurationsdatei.

[mysql]
auto-rehash

Sie können dies für alle Benutzer oder nur für einen Benutzer tun:

/etc/my.cnf: Alle Nutzer

~/.my.cnf: Tatsächlicher Benutzer

Sie können die automatische Vervollständigung auch deaktivieren, indem Sie Folgendes hinzufügen:

no-auto-rehash

Auszug aus: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

Roderick Decker
quelle
1

Sie können auch basierend auf dem Befehlsverlauf automatisch vervollständigen. Beginnen Sie mit der Eingabe und rufen Sie dann die Tasten auf, die an ed-search-prev-historyund gebunden sind ed-search-next-history. Dies gilt, wenn MySQL mit libedit-Unterstützung geliefert wird. Die Standard-Tastenkombinationen sind Strg-P ​​und Strg-N, dies kann jedoch in .editrc angepasst werden. Mein Beispiel für Strg-Auf und Strg-Ab:

# 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

Bisher basierte MySQL auf Readline und dann history-search-backwardund history-search-forwardsind die richtigen Befehle. Die Konfiguration erfolgte dann mittels .inputrc. Gleiches Beispiel wie oben:

# 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

Angenommen, Sie haben mit der Eingabe begonnen selund Strg-Up select * from some_long_table_nameaufgerufen. Wenn dies ein Befehl ist, den ich zuvor verwendet habe, wird er angezeigt.

bis
quelle