Aktivieren Sie die automatische Vervollständigung in einer interaktiven sqlite3-Shell

22

Ich verwende sqlite3 auf einem Computer, auf dem ich die Tab-Vervollständigung verwenden kann (dh .read abc wird automatisch zu .read abcdefghij.db vervollständigt). Ich möchte wissen, wie dies auf meinem persönlichen Computer aktiviert wird.

Beide Maschinen sind Ubuntu Linux und die Shell ist bash. Ich beziehe mich in der interaktiven SQLite-Eingabeaufforderung auf Autovervollständigung.

Ursprünglich geschrieben am dba .

CoatedMoose
quelle

Antworten:

12

Kompilieren Sie das Programm mit readline-Unterstützung. Readline ist eine gebräuchliche Bibliothek, die Benutzereingaben in Interpretern wie Bash und Python verarbeitet. Holen Sie sich die Quelle, die Abhängigkeiten und konfigurieren Sie mit:

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

Weitere Informationen finden Sie in der INSTALL-Datei. Erwähnenswert ist auch, dass es wahrscheinlich Binärdateien von sqlite3 gibt, die Readline-Unterstützung für Ihre Distribution bieten. Umschauen.

Ярослав Рахматуллин
quelle
1
Vermutlich haben Sie das Paket "-dev" mit den erforderlichen Headern vermisst.
Ярослав Рахматуллин
15

Sie können rlwrap verwenden, wenn Sie sqlite3 nicht kompilieren möchten. Führen Sie sudo apt install rlwrapeinfach den .bashrcfolgenden Befehl aus und richten Sie dann einen Alias ​​für sqlite3 ein :

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

Mit dieser -cOption können Sie den Dateinamen vervollständigen.

Und Sie können eine Datei erstellen ~/.rlwrap/sqlite3_completions, um Schlüsselwortvervollständigungen zu erhalten:

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

Bei -iAuswahl dieser Option wird die Groß- und Kleinschreibung nicht berücksichtigt.

arekolek
quelle
2
Diese Antwort verdient viel mehr Gegenstimmen. Beachten Sie auch, dass ich die -NOption für die Vervollständigung entfernen musste, um mit Ubuntus sqlite3 zu arbeiten.
Xhienne
Es gibt auch ein Verzeichnis /usr/share/rlwrap/completions(wie in diesem dokumentiert man rlwrap), in dem systemweite Abschlussdateien für alle Benutzer abgelegt werden können. Beachten Sie, dass die Namen der Vervollständigungsdateien nicht mit einem _completionSuffix enden sollten, wie dies beim Benutzerverzeichnis der Fall ist ~/.rlwrap.
1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3für Debian-Benutzer. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionsum alle Punktbefehle automatisch zu vervollständigen.
Zhazha