Aktifkan pelengkapan otomatis dalam shell interaktif sqlite3

22

Saya menggunakan sqlite3 pada mesin di mana saya dapat menggunakan penyelesaian tab (mis. .Read abc akan secara otomatis melengkapi ke .read abcdefghij.db. Saya ingin tahu cara mengaktifkannya di mesin pribadi saya.

Kedua mesin itu adalah ubuntu linux dan shellnya bash. Saya mengacu pada pelengkapan otomatis dalam prompt interaktif sqlite.

Awalnya diposting di dba .

CoatedMoose
sumber

Jawaban:

12

Kompilasi program dengan dukungan readline. Readline adalah perpustakaan umum yang menangani input pengguna dalam juru bahasa seperti bash dan python. Ambil sumber, dependensi, dan konfigurasikan dengan:

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

Konsultasikan file INSTALL untuk detailnya. Juga, perlu disebutkan bahwa mungkin ada binari dari sqlite3 dengan dukungan readline yang sudah dikemas untuk distro Anda. Lihatlah sekeliling.

Ярослав Рахматуллин
sumber
1
Anda mungkin melewatkan paket "-dev" dengan header yang diperlukan.
Ярослав Рахматуллин
15

Anda dapat menggunakan rlwrap jika Anda tidak ingin mengkompilasi sqlite3. Jalankan saja sudo apt install rlwrap, lalu atur alias untuk sqlite3 di .bashrc:

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

The -cpilihan memberikan penyelesaian nama file.

Dan Anda dapat membuat file ~/.rlwrap/sqlite3_completionsuntuk memiliki penyelesaian kata kunci:

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

The -ipilihan membuat kata kunci kasus selesai sensitif.

arekolek
sumber
2
Jawaban ini layak mendapat lebih banyak suara. Juga perhatikan bahwa saya harus menghapus -Nopsi untuk penyelesaian agar berfungsi dengan sqlite3 Ubuntu.
Xhienne
Ada juga /usr/share/rlwrap/completions(seperti yang didokumentasikan dalam man rlwrap) direktori untuk meletakkan file penyelesaian sistem untuk semua pengguna. Satu hal yang perlu dicatat nama file penyelesaian di sana tidak boleh diakhiri dengan _completionakhiran seperti halnya dengan ~/.rlwrapdirektori per pengguna .
1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3untuk pengguna Debian. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionsuntuk melengkapi semua perintah titik secara otomatis.
zhazha