在sqlite3交互式shell中启用自动完成功能


22

我在可以使用制表符补全的计算机上使用sqlite3(即.read abc将自动补全为.read abcdefghij.db。我想知道如何在个人计算机上启用此功能。

两台机器都是ubuntu linux,外壳是bash。我指的是sqlite交互式提示中的自动补全。

最初发布在dba上

Answers:


12

用readline supoort编译程序。Readline是一个公共库,用于处理bash和python等解释器中的用户输入。获取源代码,依赖项并使用以下命令进行配置:

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

有关详细信息,请查阅INSTALL文件。另外,值得一提的是,可能已经有sqlite3的二进制文件已经为您的发行版打包了readline支持。环视四周。


1
您可能缺少带有必要标头的“ -dev”软件包。
ЯрославРахматуллин

15

如果您不想编译sqlite3,则可以使用rlwrap。只需运行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选项使关键字补全不区分大小写。


2
这个答案值得更多的投票。还要注意,我必须删除-N完成选项才能与Ubuntu的sqlite3一起使用。
xhienne

还有一个目录/usr/share/rlwrap/completions(如所述man rlwrap),用于为所有用户放置系统范围内的完成文件。需要注意的一点是,完成文件名称不应以_completion后缀结尾,这与按用户~/.rlwrap目录不同。

1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3对于Debian用户。echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completions自动完成所有点命令。
zhazha
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.