2011-11-30 37 views
57

Trong Linux và nhiều hệ thống khác, khi điều hướng thiết bị đầu cuối, bạn có thể bấm Tab để tự động hoàn thành tên thư mục hoặc tên tệp.Tự động hoàn thành trong ứng dụng dòng lệnh MySQL

Tôi tự hỏi liệu có bất kỳ điều gì giống như vậy trong thiết bị đầu cuối MySQL hay không. Ví dụ: nếu tôi muốn nhận mô tả của someTableWithRidiculousLongName Tôi có thể nhập describe someTableW rồi Tab và nó sẽ tự động hoàn thành phần còn lại.

Có bất kỳ điều gì giống như vậy tồn tại trong thiết bị đầu cuối MySQL không?

+1

Hãy thử mycli, https://github.com/dbcli/mycli – CodyChan

Trả lời

100

Chỉnh sửa hoặc tạo ra một tập tin gọi là .my.cnf trong thư mục chính của bạn, bao gồm:

[mysql] 
auto-rehash 
+8

đây là một câu trả lời tốt hơn so với chấp nhận – galarant

+0

@galarant không nhất thiết, tốt hơn là tùy chọn – rkmax

+2

@rkmax - Nó vẫn là tùy chọn với cờ '--disable-auto-rehash'. Nhưng bây giờ bạn đã bật tính năng này theo mặc định. –

54

start MySQL console với thêm tùy chọn --auto-rehash, tức là

mysql --auto-rehash -u root -p 
+5

tôi không biết tại sao điều đó không hiệu quả đối với tôi! tab chỉ được hiểu là tab và không làm gì để hoàn thành tự động. –

+7

@pjp - Tính năng này [không hoạt động trên các bản dựng Windows thông thường] (http://stackoverflow.com/questions/269653/autocomplete-in-mysql-under-windows) –

+0

cảm ơn! tốt đẹp giải thích có –

65

Để kích hoạt autocomplete trong vòng loại dấu nhắc MySQL:

mysql> \# 

Sau đó bạn có thể nhập:

mysql> describe someTableW[TAB] 

Để nhận được:

mysql> describe someTableWithRidiculousLongName 
+5

lý do tại sao đó không phải là mặc định? –

+1

Tuyệt vời bởi sự đơn giản ... – SYNCRo

+0

đơn giản và thanh lịch – sp1rs

1

Bạn cũng có thể tự động hoàn tất dựa trên lịch sử lệnh. Bắt đầu nhập, sau đó gọi các phím bị ràng buộc đến ed-search-prev-historyed-search-next-history. Điều này áp dụng nếu mysql đi kèm với hỗ trợ libedit. Các keybindings mặc định là Ctrl-P và Ctrl-N, nhưng điều này có thể được tùy chỉnh trong .editrc. ví dụ của tôi cho Ctrl-up và Ctrl xuống:

# 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 

Trước đây, mysql được dựa trên readline, và sau đó history-search-backwardhistory-search-forward là các lệnh chính xác. Cấu hình sau đó bằng phương tiện .inputrc. Tương tự ví dụ như trên:

# 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 

Vì vậy, nói rằng bạn bắt đầu gõ sel và gọi Ctrl-Up, select * from some_long_table_name sẽ đưa ra nếu đó là một lệnh Tôi đã sử dụng trước đó.

1

Một số lưu ý về tự động rehash:

Khi bạn kích hoạt tự động hoàn chỉnh sửa tập tin cấu hình mysql ..

[mysql] 
auto-rehash 

Bạn có thể làm điều đó cho tất cả người dùng hoặc chỉ cho một người sử dụng:

/etc/my.cnf: Tất cả người dùng

~/.my.cnf: Người dùng thực tế

Bạn cũng có thể vô hiệu hóa autocompletion thêm:

no-auto-rehash 

Trích từ: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html

2

Trên OS X 10.11.6 Tôi đặt - tự động-rehash như mô tả ở trên, nhưng nó không hoạt động. (Đây là OS X nên mysql được biên soạn với BSD libedit thư viện.)

Sau đó, tôi nhớ rằng tôi đã thiết lập vi key-bindings cho khách hàng mysql bằng cách tạo ~/.editrc, chứa một dòng: ràng buộc - v. Điều này làm việc tuyệt vời cho tôi vi điều hướng giống như trong khách hàng mysql, nhưng nó đã phá vỡ hoàn thành tên cột (tôi đã có thể xác minh điều này bằng cách loại bỏ .editrc).

Vì vậy, tôi nghiên cứu một chút và thấy rằng ~/.editrc nên có ít nhất những dòng sau:

bind -v 
bind \\t rl_complete 

Với dòng bổ sung này, hoàn thành tên hoạt động chính xác trong mysql VÀ vi giống như chuyển hướng cũng làm việc . (Có các thiết lập .editrc khác cải thiện điều hướng khách hàng mysql, nhưng đây không phải là nơi để bắt đầu chuỗi thảo luận đó.)

+0

Cảm ơn vì điều này! – grocky

6

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã tìm thấy rất hữu ích MySql cli khách hàng có tính năng tự động hoàn thành nâng cao: mycli. Nó thông minh hơn nhiều so với tính năng tự động rehash.

+0

Thay thế tuyệt vời! – kraxor

Các vấn đề liên quan