Bagaimana cara menavigasi dalam Pencarian Balik bash?

40

Bash menawarkan fungsi untuk membalikkan pencarian melalui Ctrl+ R. Kemudian seseorang dapat mengetik bagian dari perintah itu akan menampilkan entri yang pas dari sejarah.

Anggap ini sejarah saya:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

Saya mencari foo. Menekan Ctrl+ Rlagi menunjukkan entri pencarian pas berikutnya. Seringkali itu terjadi pada saya, bahwa saya terlalu cepat dan menavigasi melewati hasil yang saya maksudkan dan vim foo3ditunjukkan dan sekarang saya ingin kembali ke vim foo2.

Karena itu pertanyaan saya adalah: Bagaimana cara saya menavigasi dalam pencarian terbalik?

k0pernikus
sumber
Terminal mana yang Anda gunakan? Misalnya. gnome-terminal, konsole, dan seterusnya ...
varesa
1
Yah saya tidak terlalu terbiasa dengan itu ... Kuncinya harus ctrl + S, tetapi beberapa terminal tampaknya makan kuncinya, sebelum mencapai pencarian terbalik
varesa
Ctrl + shift + R - pencarian maju sementara ctrl + R
devansvd

Jawaban:

36

Anda dapat mengakses ini melalui forward-search-historyfungsi yang diikat per default ctrl+s. Sayangnya ctrl+sdigunakan untuk memberi sinyal xoffper default yang berarti Anda tidak dapat menggunakannya untuk mengubah arah pencarian. Ada dua solusi untuk menyelesaikan masalah, satu menonaktifkan pengiriman xoff/xonpensinyalan dan lainnya mengubah kunci pengikat untukforward-search-history

Nonaktifkan xon / xoff

Jalankan stty -ixondi terminal Anda atau tambahkan ke terminal Anda ~/.bashrc. Hal ini memungkinkan Anda untuk menggunakan ctrl+suntuk menggunakan forward-search-historyfungsi sejarah.

Untuk informasi lebih lanjut tentang aliran kontrol, lihat Bagaimana mencairkan setelah tidak sengaja menekan Ctrl-S di terminal? dan beberapa jawaban

Ubah pengikat tombol

Jika Anda tidak ingin mengubah perilaku default, ctrl+sAnda dapat mengubah ikatan kunci forward-search-historydengan bind. Karena sebagian besar kunci sudah ditentukan dalam bash, Anda mungkin harus kreatif:

bind "\C-t":forward-search-history

Ini akan mengikat ctrl+tke riwayat pencarian-maju, tetapi perlu diketahui bahwa per default ctrl+tberjalantranspose-chars

Ulrich Dangel
sumber
Aku mencoba solusi pertama Anda stty -ixondi zshdan bekerja sangat baik. Namun apakah ada efek samping yang mungkin tidak diinginkan dalam menonaktifkan xoff/xonpensinyalan?
siswa
@student Anda tidak dapat menggunakan ctrl+suntuk menjeda output terminal lebih lama. Jika Anda tidak pernah menggunakannya sebelum ini tidak ada masalah
Ulrich Dangel
1
Untuk apa nilainya, saya pergi dengan solusi kedua. Barang bagus! Saya tidak pernah tahu Anda bisa membekukan konsol dengan menekan C-s.. sangat berguna saat menggunakan ekor pada log server. Rapi! (Seandainya saya punya upvote lain :))
Ashutosh Jindal
Saya tidak bisa mendapatkan opsi # 2 untuk bekerja di OSX. Saya harus melakukan ini sebagai gantinya:bind '"\C-t": history-search-forward'
stiemannkj1
0

Sebagai alternatif dari pencarian terbalik dasar dan pencarian maju yang disediakan oleh bash Anda, Anda mungkin ingin melihat ke dalam:

fzf , "pencari fuzzy baris perintah" yang dijelaskan sendiri.

Itu dapat menggantikan pencarian terbalik default dari bash Anda (dan terminal lainnya).

Manfaatnya adalah:

  • mencetak daftar perintah Anda dari histori
    • matikan penyortiran kronologis atau relevansi dengan menekan Ctrl + R lagi
  • dapat dinavigasi melalui tombol panah (atau Ctrl + J / Ctrl + K)
  • memungkinkan mencari beberapa jarum

Alur kerja saya sekarang sepenuhnya bergantung pada fzf atas pencarian terbalik dasar pada mesin yang saya kendalikan.

k0pernikus
sumber