Bagaimana cara membuat terminal autocomplete ketika ada beberapa file / direktori?

32

Jika saya memiliki beberapa direktori, seperti:

afoo abar

kadang-kadang terminal saya akan menolak pelengkapan otomatis ketika saya menekan tab (misalnya "cd a" lalu tab), dan mencetak daftar direktori sebagai gantinya. Kadang-kadang bahkan mengeluarkan suara berisik dan menjengkelkan. Adakah yang tahu bagaimana cara membuatnya secara otomatis dalam kasus seperti ini? Misalnya itu bisa menunjukkan abar dulu, dan kemudian afoo jika saya tekan tab lagi. Saya melihat ini adalah kasus di windows, atau beberapa aplikasi di Ubuntu

Tifatul
sumber

Jawaban:

46

Sesuatu yang merupakan penyelamat bagi saya adalah memiliki siklus bash melalui kemungkinan bukannya menunjukkan daftar bodoh.

Saat bash menggunakan readlineuntuk pelengkapan otomatisnya, tambahkan baris berikut ke~/.inputrc

Setelah Anda puas dan telah diuji secara menyeluruh di bawah ini solusi untuk beberapa hari / minggu, cut dan paste (tidak copy!) Pengaturan yang sama dari ~/.inputrcke /etc/inputrcyang berisi pengaturan sistem-lebar, membuat ini tersedia untuk semua pengguna di sistem Anda (termasuk tamu).

Kodez:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

kemudian exitterminal Anda (atau terminal jarak jauh seperti dempul) dan buka lagi ...

Contoh:

  1. Bila Anda memiliki 3 file: file1, file2dan file3dan Anda ketik:

    e fTabTabTab

    akan berputar melalui:

    e file1
    e file2
    e file3
    

    dan ketika Anda ingin siklus mundur, cukup tekan Shift+Tab

  2. Saat Anda mengetik:

    very-complicated-command with lots of command line parameters

    dan lain kali Anda membutuhkan perintah yang sama, Anda cukup mengetik:

    very

    dan itu akan diketik untuk Anda:

    very-complicated-command with lots of command line parameters

Ini akan menghemat banyak waktu di bash! ;-)

Fabby
sumber
2
+1, menarik, tetapi: 1. ~/.inputrcmungkin lebih disukai daripada /etc/inputrc, dan 2. Saya pikir Anda dapat mengatur ini bashsecara langsung: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru
Ini cukup bagus, terima kasih (dan dapatkan upvote saya). Apakah ada cara universal untuk menunjukkan opsi yang akan dilaluinya, yang menggabungkan yang terbaik dari kedua dunia? Saya suka tab + tab kemungkinan dengan folder dan sub - perintah, dll. Jadi saya tidak harus mengingat semuanya (mis git branch <tab through branches>. Namun, jika saya bisa melihat daftar dan tab melalui item-itemnya, itu akan bagus! Untuk direktori dan file lsadalah pilihan untuk melihat barang apa saja yang tersedia. Namun, untuk subperintah itu tidak mudah atau jelas, sayangnya
Erik
Ini juga berfungsi pada Putty! Hanya harus me-restart sekali :)
np8
@Erik: Rupanya, apa yang Anda minta itu mungkin tetapi tidak akan mengedit jawaban saya untuk menjaga hal-hal yang sederhana di sini. (menghapus komentar lama yang tidak mungkin)
Fabby
18

Setelah tanggal 1 tabAnda harus memasukkan lebih banyak surat. Jadi, jika Anda mengetik

cd a

dan tekan tabAnda tidak mendapatkan apa-apa dan setelah satu detik tab(segera mengikuti) Anda mendapatkan daftar nama yang dimulai dengan adan kemudian perlu memasukkan funtuk memilikinya secara otomatis menyelesaikan sisanya sehingga

cd atabtabftabtab

akan menghasilkan

cd afoo
Rinzwind
sumber
2
IMHO: Ini adalah cara yang benar. Saya pribadi menemukan perilaku windows sangat mengganggu. Pertimbangkan kasus di mana Anda memiliki banyak file dimulai dengan adan Anda membutuhkan yang terakhir. Ketika Anda secara tidak sengaja menekan tab setelah aAnda harus menelusuri daftar semua penyelesaian yang mungkin untuk sampai ke yang benar.
Tobias
@Tobias: ketika Anda secara tidak sengaja menekan [Tab] terlalu dini menggunakan sistem lain , masih ada [Ctrl] [K] ... ;-)
Fabby