Bagaimana cara mem-forward-search-history dengan perintah reverse-i-search (ctrl + r)?

12

Dalam manual readline

# man readline

Berikut ini menjelaskan cara mencari mundur dan maju.

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

Ketika saya menekan ctrl + r dan mengetik "apt-get", saya dapat melakukan sejarah pencarian terbalik dengan terus mengetuk ctrl + r. Tapi kemudian saya ketuk ctrl + s dan terminal tidak maju. Apakah saya melakukan sesuatu yang salah?

Juga kunci apa yang diwakili oleh awalan Meta "M-"?

pengguna784637
sumber

Jawaban:

15

Urutan C-sdiambil dari driver terminal, seperti yang Anda lihat dari

stty -a | grep '\^S'

Untuk mengosongkan urutan untuk digunakan oleh readline, atur urutan terminal berhenti ke beberapa urutan lainnya, misalnya

stty stop ^J

atau hapus semuanya bersama

stty stop undef

Setelah itu C-sakan bekerja di terminal yang diberikan.

Atur ~/.bashrcagar berfungsi di setiap terminal.

The M-urut berarti Altkunci, sebagaimana telah dicatat.

enzotib
sumber
^ J adalah pilihan yang baik karena untuk stop, itu tidak digunakan untuk hal lain
hobs
3

Selain menetapkan char 'stop' TTY yang berbeda seperti yang disarankan di atas, Anda dapat menghapus seluruhnya jika Anda tidak berencana menggunakannya (saya cenderung tidak), seperti ini:

$ stty stop undef

Kemudian readline dapat menggunakan control-s untuk pencarian maju dan Anda tidak akan mendapatkan perilaku aneh karena char stop baru ditambahkan.

tidak
sumber
Ini cara yang jauh lebih baik.
A.Danischewski
1

forward-search-history (Cs) tidak berfungsi (meskipun ada di halaman manual).

'M-' mewakili pengubah kunci Alt.

Gödel
sumber
1
Tidak memperbaiki C-sbagian, lihat jawaban saya.
enzotib
0

Tolong jangan gunakan:

stty stop ^J

tapi

stty stop ^P

atau apa pun, karena ^Jmembuat masalah besar dengan ssh. (Lagi pula saya tidak tahu kenapa.) Setelah saya login Enterdan backslash tidak berfungsi. atau saya harus mengetik:

stty sane 
export TERM=linux

sebelum saya ingin mengetik

ssh root@192...

begitu

stty stop ^P

memecahkan kedua masalah sekaligus.

xerostomus
sumber
0

Anda dapat menonaktifkan kontrol aliran XON / XOFF:

stty -ixon

di profil ~ /. Anda atau yang serupa, maka Ctrl + S akan dikenali.

Contoh

Steven Penny
sumber
0

Untuk beralih ke depan saat menggunakan pencarian terbalik (dengan perintah Ctrl-R):

  1. Buka file .bashrc Anda:
    sudo gedit ~/.bashrc

  2. tambahkan baris ini (huruf "f" dapat diganti dengan yang lain yang belum digunakan oleh sistem)

    bind '"\C-f": forward-search-history' 
    
  3. Tutup file Anda dan perbarui .bashrc Anda (atau buka terminal lain) dengan perintah:
    source ~/.bashrcatau. ~/.bashrc

SEKARANG ANDA BISA PINDAHKAN MAJU DALAM SEJARAH DENGAN SINGKAT: Ctrl + f

Bekerja di Ubuntu 18,04 LTS

Franklin TN
sumber
0

Perhatikan bahwa saya telah menggunakan

stty stop ^J
stty -ixoff

di .bashrc untuk mengaktifkan pencarian maju dan nonaktifkan "Output telah ditangguhkan dengan menekan Ctrl + S. Tekan Ctrl + Q untuk melanjutkan" pesan di Konsole ketika ctrl + s ditekan, tetapi kedua perintah secara terpisah memutus integrasi Konsole di Dolphin ( jalan pintas "F4") dengan cara yang harus saya lakukan ctrl + c dua kali untuk membuatnya bekerja, dan perintah "cd" otomatis di mana tidak disuntikkan ketika menavigasi grafis.

Jadi sekarang saya lebih suka:

stty stop undef
stty -ixon

Ini memiliki efek yang sama, semuanya tampaknya berfungsi seperti yang diharapkan;)

NoGa
sumber