Cari perintah sebelumnya dengan awalan yang sama ketika saya menekan Up at a prompt shell


19

Datang dari dunia FreeBSD Saya ingin membuat terminal Linux berperilaku seperti FreeBSD, terutama versi 9.1, pada dasarnya ketika Anda mengetik cddi terminal dan menekan panah "naik", Anda dapat menelusuri semua perintah dalam sejarah dimulai dengan cdyang membuat Anda mendapatkan banyak waktu.

Saya tidak tahu cara mengaktifkan fitur ini di Linux Debian atau CentOS yang memaksa saya untuk mengetik keseluruhan, bisakah seseorang tolong bantu.


7
Itu fungsi dari shell, bukan terminal. Shell apa yang Anda gunakan di FreeBSD? Anda mungkin bisa mendapatkan shell yang sama (atau serupa) untuk Linux.
cjm

Saya menggunakan shell tcsh.
Abdelilah Benaou

2
Saya menggunakan tcsh bawah OS X dan tidak memiliki perilaku ini berguna tampak ... Setelah beberapa pencarian, saya menemukan saya bisa mengaktifkannya dengan menempatkan bindkey -k (up|down) history-search-(back|for)warddi saya .tcshrc seperti dijelaskan di sini . Keren!
Garrett Albright

Jawaban:


34

Tambahkan ke berikut ini ke ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Penjelasan

~/.inputrcadalah file konfigurasi untuk GNU readline . Banyak shell, termasuk bashdan tcshmenggunakan readline untuk mengedit baris perintah. Dua baris di atas akan memberi tahu readline untuk menjalankan fungsi pencarian histori ketika urutan escape untuk tombol panah atas ( \e[A) dan tombol panah bawah ( \e[B) ditemui.


Saya ingin menambahkan F12 untuk menempatkan kata terakhir dari baris terakhir ke akhir perintah saat ini. Last wordsering merupakan jalan yang ingin saya coba di berbagai klise misterius. Dan Shift F12 untuk menempatkan saya kembali mengedit seluruh baris terakhir dari awal. ~/.inputrcadalah alat yang berguna.
jalanb

The Pergeseran F12 salah satu memerlukan vi modus .
jalanb

6

Apa yang terjadi adalah bahwa FreeBSD dan Linux menggunakan shell yang berbeda secara default. FreeBSD default ke tcsh , yang memiliki fitur interaktif yang lebih baik daripada bash di masa lalu (tetapi bash telah menyusul) tetapi fitur skrip yang jauh lebih buruk .

Cara paling mudah untuk mendapatkan lingkungan yang biasa Anda gunakan adalah dengan mengganti shell Anda ke tcsh di Linux. Asalkan tcsh diinstal di seluruh sistem (jika tidak, minta administrator sistem Anda untuk menginstalnya), jalankan chsh -s tcshuntuk mengganti shell default Anda.

Atau, Anda dapat mengatur bash agar perintah ini sudah biasa Anda gunakan. Secara default, tanda panah Updan Downnavigasi di antara semua perintah dalam sejarah, bukan hanya yang dimulai dengan awalan yang Anda ketik. Untuk mengubahnya ke perilaku yang biasa Anda gunakan, letakkan baris berikut di file inisialisasi bash, yang ada .bashrcdi direktori home Anda. Jalankan . ~/.bashrcatau mulai shell baru untuk membaca kembali file inisialisasi.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Urutan melarikan diri adalah apa yang dikirim terminal Anda ke shell ketika Anda menekan tombol panah. Upmungkin \eOA(melarikan diri, O, A) atau \e[Atergantung pada terminal Anda, dan juga untuk Down.

Secara default, bash menawarkan binding kunci berbeda untuk mencari histori perintah. Anda dapat menekan Ctrl+ R, lalu memasukkan beberapa karakter untuk mencari perintah yang mengandung substring ini di mana saja di telepon. Tekan Ctrl+ Suntuk maju bukannya mundur. Pencarian bersifat inkremental (mis. Tipe as-you); Alt+ Pdan Alt+ Nmemberi Anda pencarian non-inkremental.

Alih-alih bash dan tcsh, Anda bisa beralih ke zsh, yang memiliki beberapa fitur rapi yang tidak ditemukan di shell lain . Zsh memiliki Ctrl+ Rdan Ctrl+ Ssecara default seperti halnya bash. Untuk mendapatkan Updan Downseperti yang Anda miliki di tcsh, masukkan baris berikut di ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Jika Anda ingin menggunakan shell yang sama di mana-mana, Anda dapat menggunakan bash atau zsh di FreeBSD juga, asalkan port tersebut diinstal (sekali lagi, tanyakan administrator sistem Anda).


1

tcshtersedia untuk sebagian besar distribusi Linux. Coba instal tcshpaket, lalu jalankan chsh -s /bin/tcshuntuk menjadikannya shell default Anda.


1
Atau Anda mungkin mempertimbangkan beralih ke bash (saya lakukan).
Keith Thompson

1

Jawaban lain mengatasinya, tetapi jika Anda menginginkan lebih, lihat di https://github.com/zsh-users/zsh-history-substring-search

Prezto ( https://github.com/sorin-ionescu/prezto ) juga penuh dengan barang zsh.


Terima kasih atas jawaban Anda, ngomong-ngomong, saya masih belum melihat manfaat apa yang dimiliki zsh daripada bash atau tcsh?
Abdelilah Benaou

1
Hmm, Anda bisa melakukan hampir semua hal mendasar dalam semua kerang ini. Saya menggunakan zsh karena bundel prezto yang terpelihara dengan baik (mungkin pengubah permainan besar), prompt yang tepat (yang merupakan fitur eksklusif) dan karena rasanya lebih halus daripada bash (konfigurasi dan semacamnya).
Fuad Saud
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.