Bash pelengkapan otomatis seperti zsh

28

Saya menggunakan bash, tetapi saya ingin memiliki autocomplete gaya zsh (Anda menekan tab dan tab melalui kemungkinan), daripada apa yang tampaknya dilakukan bash, yang menampilkan daftar kemungkinan tetapi tidak memilih apa pun sampai saya mengetik beberapa lagi untuk ambigu. Bagaimana saya bisa mendapatkan perilaku tipe zsh di bash?

Mencari solusi telah menghasilkan banyak jawaban untuk pertanyaan lain, jadi saya berharap saya bisa mendapatkan jawaban sederhana di sini (yaitu apa yang harus ditempelkan ke saya .bashrc).

(Dan untuk menjawab pertanyaan yang jelas, saya perlu menggunakan bash di sini karena saya baru saja bergabung dengan sebuah tim dan mereka melakukan beberapa hal untuk menyiapkan bash agar lingkungan lebih mudah untuk dikerjakan. Saya mungkin pada akhirnya dapat memastikan saya membuatnya bekerja dengan cara yang sama. cara di zsh, tapi untuk sekarang lebih mudah jika saya menggunakan bash dan hanya membuatnya berperilaku lebih seperti zsh selama penggunaan interaktif.)

G Gordon Worley III
sumber

Jawaban:

22

saya menggunakan

bind 'TAB:menu-complete'

untuk mencapainya

Ciclamino
sumber
11
Ketika saya menambahkan ini ke .bashrc saya, tab berputar melalui opsi yang mungkin daripada daftar mereka di terminal. Apakah mungkin untuk mendapatkan kedua perilaku tersebut?
Antonios Hadjigeorgalis
Untuk Shitf-Tabmenyelesaikan mundur, gunakan bind '"\e[Z":menu-complete-backward'.
Ainar-G
24

Untuk mendapatkan penyelesaian pertama dan daftar Anda bisa menambahkan yang berikut ke bashrc

bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'

show-all-if-ambiguous: Ini mengubah perilaku default fungsi penyelesaian. Jika diatur ke 'aktif', kata-kata yang memiliki lebih dari satu kemungkinan penyelesaian menyebabkan pencocokan dicantumkan segera daripada membunyikan bel. Nilai default adalah 'tidak aktif'.

lihat Bash Manual untuk informasi lebih lanjut.

Edit:

Ini tidak membuat bash bekerja persis seperti zsh tho. Zsh akan menyelesaikan hingga pertandingan ambigu berikutnya. Bash hanya akan menggilir semua pertandingan.

misalnya

$ ls ~/.ba<tab> .bashrc .bash_history .bash_profile

  • zsh: akan selesai hingga ~ / .bash dan menyajikan daftar kecocokan yang dengan mudah memungkinkan Anda untuk menambahkan _ dan menekan <tab>lagi.
  • bash: hanya akan menggilir semua pertandingan ~ / .ba *.
ingkebil
sumber
8
Saya suka menggunakan tombol panah, dan indikasi visual pelengkapan otomatis zsh. Apakah ada cara untuk mendapatkan perilaku tersebut dengan bash? Saya beralih kembali untuk kompatibilitas server yang lebih baik
CESCO
2

Menindaklanjuti jawaban ingkebil , bagi mereka yang memasukkan binddan setke dalam inputrc:

$ tail -n 4 /etc/inputrc
# zsh like completion:
# /superuser/288714/bash-autocomplete-like-zsh
set show-all-if-ambiguous on
TAB:menu-complete

Saya suka menjaga .bashrckebersihan saya .

bartekbrak
sumber