Autouzupełnianie w kliencie wiersza poleceń MySQL

81

W Linuksie i wielu innych systemach podczas nawigacji po terminalu możesz nacisnąć, Tababy automatycznie uzupełnić nazwę katalogu lub pliku.

Zastanawiam się, czy coś takiego jest w terminalu MySQL. Na przykład, jeśli chcę uzyskać opis someTableWithRidiculousLongName, mógłbym wpisać describe someTableWto, Taba resztę uzupełniłbym automatycznie.

Czy coś takiego istnieje w terminalu MySQL?

Alan B. Dee
źródło
2
Wypróbuj mycli, github.com/dbcli/mycli
CodyChan

Odpowiedzi:

123

Edytuj lub utwórz plik o nazwie .my.cnfw Twoim katalogu domowym, zawierający:

[mysql]
auto-rehash
T Zengerink
źródło
@galarant niekoniecznie, lepiej być opcjonalnym
rkmax
2
@rkmax - z --disable-auto-rehashflagą nadal jest opcjonalne . Ale teraz włączyłeś to domyślnie.
T Zengerink
3
Ale to nie działa, gdy wpisuję polecenia małą literą.
alhelal
85

Aby włączyć autouzupełnianie w wierszu poleceń MySQL:

mysql> \#

Następnie możesz wpisać:

mysql> describe someTableW[TAB]

Aby otrzymać:

mysql> describe someTableWithRidiculousLongName
catmantiger
źródło
7
dlaczego to nie jest domyślne?
Oussama Elgoumri
1
proste i eleganckie
sp1rs
1
mysql> rehash - Alternatywnie do „\ #” możemy również wpisać polecenie „rehash” mysql w następujący sposób. Myśl o udostępnianiu jako „powtórzeniu” może być łatwiejsza do zapamiętania dla niektórych osób, takich jak ja: mysql> rehash po tym autouzupełnianie zacznie działać!
janeshs
1
@OussamaElgoumri Ponieważ niektórzy z nas lubią wklejać złożone zapytania do wiersza poleceń, a te zapytania mogą zawierać znaki tabulacji do wcięć.
alexg
61

uruchom konsolę MySQL z dodatkową opcją --auto-rehashtj

mysql --auto-rehash -u root -p
rabudde
źródło
7
Nie wiem, dlaczego to nie działa! tabulator jest interpretowany tylko jako tabulator i nie powoduje automatycznego uzupełniania.
Praveen Puglia
7
@pjp - Ta funkcja nie działa na zwykłych kompilacjach systemu Windows
Álvaro González
1
Uwaga, tabcomplete działa tylko po podłączeniu jednego do bazy danych, jak wskazał Otheus
Simeon,
22

Wiem, że to stare pytanie, ale znalazłem bardzo pomocnego klienta MySql cli z zaawansowanym autouzupełnianiem: mycli . Jest znacznie inteligentniejszy niż wbudowana funkcja automatycznego ponownego mieszania.

mateuszlewko
źródło
7
Doskonała alternatywa!
kraxor
3
O tak, odpowiedź na najwyższym poziomie
smac89
1
auto-rehashnie działa na moim. Przełączony na mycli i boom ... działał jak zawodowiec.
Rajesh Chaudhary
4

Na OS X 10.11.6 ustawiłem --auto-rehash jak opisano powyżej, ale to nie zadziałało. (To jest OS X, więc mysql jest skompilowany z BSD libedit biblioteką ).

Potem przypomniałem sobie, że ustawiłem przypisania klawiszy vi dla klienta mysql, tworząc ~ / .editrc, zawierający jedną linię: bind -v . Działa to świetnie, dając mi nawigację podobną do vi w kliencie mysql, ale zepsuło uzupełnianie nazw kolumn (mogłem to zweryfikować usuwając .editrc ).

Więc zbadałem trochę i odkryłem, że ~ / .editrc powinno mieć co najmniej następujące linie:

bind -v
bind \\t rl_complete

Dzięki tej dodatkowej linii uzupełnianie nazw działa poprawnie w nawigacji podobnej do mysql AND vi. (Istnieją inne ustawienia .editrc, które znacznie poprawiają nawigację po kliencie mysql, ale nie jest to miejsce na rozpoczęcie tego wątku dyskusji).

pob
źródło
3

Kilka uwag na temat automatycznego ponownego szyfrowania:

Gdy włączysz autouzupełnianie, edytuj plik konfiguracyjny mysql.

[mysql]
auto-rehash

Możesz to zrobić dla wszystkich użytkowników lub tylko dla jednego użytkownika:

/etc/my.cnf: Wszyscy użytkownicy

~/.my.cnf: Aktualny użytkownik

Możesz także wyłączyć dodawanie autouzupełniania:

no-auto-rehash

Pobrano z: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

Roderick Decker
źródło
1

Możesz także uzupełniać automatycznie na podstawie historii poleceń. Zacznij pisać, a następnie wywołaj klawisze powiązane z ed-search-prev-historyi ed-search-next-history. Dotyczy to sytuacji, gdy mysql obsługuje bibliotekę libedit. Domyślne skróty klawiszowe to Ctrl-P i Ctrl-N, ale można to dostosować w .editrc. Mój przykład dla Ctrl-w górę i Ctrl-w dół:

# 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

Wcześniej mysql był oparty na readline, a następnie history-search-backwardi history-search-forwardsą poprawnymi poleceniami. Konfiguracja odbywała się wtedy za pomocą .inputrc. Taki sam przykład jak powyżej:

# 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

Powiedzmy, że zacząłeś pisać seli wywoływałeś Ctrl-Up, select * from some_long_table_namepojawi się, jeśli jest to polecenie, którego użyłem wcześniej.

do
źródło