Włącz autouzupełnianie w interaktywnej powłoce sqlite3

22

Korzystam z narzędzia sqlite3 na komputerze, na którym mogę korzystać z uzupełniania tabulatorów (tzn. .Read abc będzie się automatycznie uzupełniał do .read abcdefghij.db. Chciałbym wiedzieć, jak to włączyć na moim komputerze osobistym.

Obie maszyny są Ubuntu Linux, a powłoka to bash. Mam na myśli autouzupełnianie w interaktywnym pytaniu sqlite.

Pierwotnie opublikowane na dba .

CoatedMoose
źródło

Odpowiedzi:

12

Skompiluj program z suportem readline. Readline to popularna biblioteka, która obsługuje dane wejściowe użytkownika w interpretatorach, takich jak bash i python. Pobierz źródło, zależności i skonfiguruj za pomocą:

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

Szczegółowe informacje można znaleźć w pliku INSTALL. Warto również wspomnieć, że prawdopodobnie istnieją pliki binarne narzędzia sqlite3 z obsługą readline dla Twojej dystrybucji. Rozejrzeć się.

Ярослав Рахматуллин
źródło
1
prawdopodobnie brakuje ci pakietu „-dev” z niezbędnymi nagłówkami.
Ярослав Рахматуллин
15

Możesz użyć rlwrap, jeśli nie chcesz kompilować sqlite3. Po prostu uruchom sudo apt install rlwrap, a następnie skonfiguruj alias dla sqlite3 w swoim .bashrc:

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

Ta -copcja umożliwia uzupełnienie nazw plików.

I możesz utworzyć plik ~/.rlwrap/sqlite3_completionsz uzupełnieniami słów kluczowych:

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

-iOpcja sprawia, że słowa kluczowego przypadku zakończenia nieczuły.

arekolek
źródło
2
Ta odpowiedź zasługuje na znacznie więcej głosów. Zauważ też, że musiałem usunąć -Nopcję ukończenia, aby współpracować z sqlite3 Ubuntu.
xhienne,
Istnieje również /usr/share/rlwrap/completions(zgodnie z dokumentacją man rlwrap) katalog, w którym można umieścić ogólnoukładowe pliki uzupełnień dla wszystkich użytkowników. Należy zauważyć, że nazwy plików zakończenia nie powinny kończyć się _completionprzyrostkiem, tak jak ma to miejsce w przypadku ~/.rlwrapkatalogu użytkownika .
1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3dla użytkowników Debiana. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionsdo autouzupełniania wszystkich poleceń kropek.
zhazha