Saya benar-benar menyukai kecepatan umum zsh, tetapi ada dua hal yang mengganggu saya.
- Saya harus menekan tunggu beberapa saat antara memukul melarikan diri dan memukul garis miring untuk sampai ke pencarian riwayat (jika memukul garis miring terlalu cepat dikatakan
zsh: do you wish to see all 514 possibilities (172 lines)
) - Setelah masuk ke mode memasukkan karena memukul
a
atauA
, saya tidak bisa mundur melewati titik di mana saya memasuki mode memasukkan.
Saya tahu bahwa 2 seperti klasik vi, tetapi saya lebih suka gaya vim.
command-line
zsh
Chas. Owens
sumber
sumber
i
dua kali untuk kembali ke mode insert, saya akan sangat merekomendasikan perbaikan ini !Jawaban:
(1) Untuk beberapa alasan, bindkey berperilaku aneh ketika datang ke "/":
<esc>
diikuti dengan cepat/
ditafsirkan sebagai<esc-/>
. (Saya mengamati perilaku ini beberapa hari yang lalu; tidak yakin apa yang menyebabkannya.) Saya tidak tahu apakah ini bug atau fitur, dan apakah ini fitur jika dapat dinonaktifkan, tetapi Anda dapat mengatasinya dengan cukup mudah. .Kombo kunci ini mungkin terikat
_history-complete-older
, yang menghasilkan hasil yang tidak diinginkan - Anda dapat menggunakanbindkey -L
untuk melihat apakah ini masalahnya.Bagaimanapun, jika Anda tidak keberatan mengorbankan sebenarnya
<esc-/>
(ditekan bersama-sama, sebagai akord) yang mengikat, Anda dapat kembali mengikat ke vi-mode perintah pencarian sejarah, sehingga mengetik<esc>
diikuti oleh/
melakukan hal yang sama di mengetik setiap kecepatan. =)Karena ini akan diperlakukan sebagai akor, itu tidak akan memiliki efek memasuki mode perintah vi pertama, jadi kita harus memastikan itu terjadi terlebih dahulu. Pertama, Anda perlu mendefinisikan suatu fungsi; letakkan di suatu tempat di Anda
fpath
jika Anda menggunakannya, atau taruh di .zshrc Anda sebaliknya:Sisanya masuk dalam .zshrc Anda:
Harus baik untuk pergi.
(2) Anda dapat memperbaiki kunci backspace sebagai berikut:
Juga, jika Anda menginginkan perilaku serupa untuk perintah gaya vi lainnya:
sumber
^[/
tidak\e/
, tetapi keduanya adalah cara yang sah untuk mengatakan melarikan diri. Perubahan itu bekerja dengan sempurna. Sekarang saya bermain dengan lebih lengkap, sepertinya mode vi zsh menyebalkan dibandingkan dengan bash (atau setidaknya tidak sepenuhnya dikonfigurasikan secara default). Salah satu contoh dari hal ini adalah fakta bahwa ia memasukkan Anda ke mode penyisipan setelah riwayat pencarian. Saya harus kembali ke mode perintah untuk menekan n untuk menemukan item pencarian berikutnya..vi-history-search-backward
. Saya akan menulis dan mengedit jawaban saya - periksa kembali hari ini.bindkey | grep <searchterm>
untuk salah satu syarat, mereka semua diawali olehvi-
. Apakah saya perlu mengaturbindkey
perintah yang tidak diawali olehvi-
?Saya hanya akan menjawab pertanyaan (1).
Masalah Anda adalah KEYTIMEOUT. Saya mengutip dari zshzle (1):
0.4s adalah keterlambatan yang Anda alami setelah memukul ESC. Cara mengatasinya adalah menetapkan KEYTIMEOUT hingga 0,01 dalam salah satu file startup shell:
Sayangnya ini memiliki efek knock-on: Hal-hal lain mulai salah ...
Pertama, sekarang ada masalah dalam mode perintah vi: Mengetik ESC menyebabkan kursor hang, dan kemudian karakter apa pun yang Anda ketik selanjutnya akan tertelan. Ini karena ESC tidak terikat dengan apa pun secara default dalam mode perintah vi, namun ada widget multi-karakter yang dimulai dengan ESC (tombol kursor!). Jadi ketika Anda menekan ESC, ZLE menunggu karakter berikutnya ... dan kemudian mengkonsumsinya.
Cara mengatasinya adalah untuk mengikat ESC ke sesuatu dalam mode perintah, sehingga memastikan bahwa sesuatu akan diteruskan ke ZLE setelah $ KEYTIMEOUT centiseconds. Sekarang kita dapat tetap mengikat mulai dengan ESC dalam mode perintah tanpa efek buruk ini. Saya mengikat ESC ke karakter bel, yang menurut saya lebih tidak mengganggu daripada memasukkan sendiri (dan shell saya dibungkam):
Masalah berikutnya: Secara default ada beberapa widget dua-kunci yang dimulai dengan ^ X dalam mode insert vi; ini menjadi tidak dapat digunakan jika $ KEYTIMEOUT disetel sepenuhnya. Apa yang saya lakukan adalah unbind ^ X dalam mode insert vi (self-insert secara default); ini memungkinkan widget dua tombol untuk terus bekerja.
Anda kehilangan ikatan untuk disisipkan sendiri, tetapi Anda dapat mengikatnya dengan sesuatu yang lain tentu saja. (Aku tidak, karena aku tidak menggunakannya.)
Masalah terakhir (saya telah menemukan sejauh ini): Ada beberapa keybindings default yang tersisa yang kita "kehilangan" karena pengaturan $ KEYTIMEOUT segera, untuk menjelaskan: yang dimulai dengan ESC dalam mode insert vi yang bukan merupakan kunci kursor. Saya pribadi membukanya kembali dengan ^ ^ sebagai gantinya:
sumber