Включить автозаполнение в интерактивной оболочке sqlite3


22

Я использую sqlite3 на машине, где я могу использовать завершение табуляции (т. Е. .Read abc будет автоматически завершать до .read abcdefghij.db. Я хотел бы знать, как включить это на моем персональном компьютере.

Обе машины - Ubuntu Linux, а оболочка - Bash. Я имею в виду автозаполнение в интерактивной подсказке sqlite.

Первоначально опубликовано на DBA .

Ответы:


12

Скомпилируйте программу с помощью readline supoort. Readline - это общая библиотека, которая обрабатывает пользовательский ввод в интерпретаторах, таких как bash и python. Извлеките источник, зависимости и настройте:

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

Обратитесь к файлу INSTALL для деталей. Кроме того, стоит упомянуть, что, вероятно, для вашего дистрибутива уже есть бинарные файлы sqlite3 с поддержкой readline. Смотреть по сторонам.


1
вы, вероятно, пропустили пакет "-dev" с необходимыми заголовками.
Ярослав Рахматуллин

15

Вы можете использовать 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опция делает завершение ключевых слов нечувствительным к регистру.


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для автозаполнения всех точечных команд.
Жажа
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.