題 在sqlite3交互式shell中啟用自動完成功能


我在一台機器上使用sqlite3,我可以使用Tab鍵完成(即.read abc將自動完成到.read abcdefghij.db。我想知道如何在我的個人機器上啟用它。

這兩台機器都是ubuntu linux,shell是bash。我指的是sqlite交互式提示中的自動完成。

最初貼在上面 DBA


15
2017-11-04 20:52


起源




答案:


使用readline supoort編譯程序。 Readline是一個通用庫,用於處理解釋器中的用戶輸入,例如bash和python。獲取源,依賴項並配置:

user@computer in: ~/src/sqlite-autoconf-3071602
$ ./configure --enable-readline=yes

有關詳細信息,請參閱INSTALL文件。此外,值得一提的是,有很多sqlite3的二進製文件已經為你的發行版打包了readline支持。環視四周。


9
2017-07-21 02:23



不幸的是,使用該選項編譯SQLite3 enable-readline=yes 在Ubuntu 18.04 LTS上沒有為我工作。唯一有效的是 rlwrap -a -N -c -i sqlite3 - kimbaudi
你可能錯過了帶有必要標題的“-dev”包。 - Ярослав Рахматуллин


您可以使用 rlwrap 如果你不想編譯sqlite3。趕緊跑 sudo apt install rlwrap,然後在你的。中設置sqlite3的別名 .bashrc

alias sqlite="rlwrap -a -N -c -i sqlite3"

-c 選項為您提供文件名完成。

你可以創建一個文件 ~/.rlwrap/sqlite3_completions 要獲得關鍵字完成次數:

ABORT ACTION ADD AFTER ALL ALTER ANALYZE AND AS ASC ATTACH AUTOINCREMENT BEFORE BEGIN BETWEEN BY CASCADE CASE CAST CHECK COLLATE COLUMN COMMIT CONFLICT CONSTRAINT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DEFAULT DEFERRABLE DEFERRED DELETE DESC DETACH DISTINCT DROP EACH ELSE END ESCAPE EXCEPT EXCLUSIVE EXISTS EXPLAIN FAIL FOR FOREIGN FROM FULL GLOB GROUP HAVING IF IGNORE IMMEDIATE IN INDEX INDEXED INITIALLY INNER INSERT INSTEAD INTERSECT INTO IS ISNULL JOIN KEY LEFT LIKE LIMIT MATCH NATURAL NO NOT NOTNULL NULL OF OFFSET ON OR ORDER OUTER PLAN PRAGMA PRIMARY QUERY RAISE RECURSIVE REFERENCES REGEXP REINDEX RELEASE RENAME REPLACE RESTRICT RIGHT ROLLBACK ROW SAVEPOINT SELECT SET TABLE TEMP TEMPORARY THEN TO TRANSACTION TRIGGER UNION UNIQUE UPDATE USING VACUUM VALUES VIEW VIRTUAL WHEN WHERE WITH WITHOUT

-i 選項使關鍵字完成不區分大小寫。


8
2017-11-11 16:02



這個答案值得更多的投票。另請注意,我不得不刪除 -N 完成與Ubuntu的sqlite3一起使用的選項。 - xhienne
還有 /usr/share/rlwrap/completions (如 man rlwrap)目錄,為所有用戶提供系統範圍的完成文件。有一點需要注意,那裡的完成文件名不應該以 _completion 後綴與每用戶的情況一樣 ~/.rlwrap 目錄。 - w17t
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3 對於Debian用戶。 echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completions 自動完成所有點命令。 - zhazha
這是我在Ubuntu 18.04 LTS上唯一有效的解決方案。使用標誌編譯源代碼 --enable-readline=yes 什麼也沒做此外,我沒有刪除 -N @xhienne提到的這個選項。 - kimbaudi