ALT + panah bergerak di antara kata-kata di zsh dan iTerm2

19

Saya masuk di salah satu server penyedia hosting dan memperhatikan ALT + kiri dan ALT + kanan bergerak di antara kata-kata dalam prompt shell di Layar GNU.

Apa jenis binding kunci yang perlu saya konfigurasi dan di mana mendapatkan perilaku ini ke OS X zsh lokal saya yang berjalan di iTerm2?

Mikko Ohtamaa
sumber
Orang-orang yang tertarik pada pertanyaan ini mungkin juga tertarik untuk mengetahui bahwa kata-kata zsh bukan kata-kata bash. FOO=BARadalah satu kata untuk zsh dan 2 kata untuk bash. Demikian pula, jika Anda mengatur kursor ke akhir foo --bardan melakukan alt + backspace, di bash Anda akan memiliki foo --dan di zsh Anda akan memiliki foo . Zsh menambahkan banyak fitur ke bash, tetapi ia juga memiliki banyak default gila untuk ditimpa.
weberc2

Jawaban:

28

Saya menemukan solusinya di sini: https://coderwall.com/p/h6yfda . Akan menyalin bagian terpenting darinya, jika tautannya turun.

  1. Pergi ke Preferensi, Profil, Kunci.
  2. Atur kunci ⌥ kiri Anda untuk bertindak sebagai karakter pelarian.
  3. Temukan pintasan saat ini untuk ⌥ ← atau buat yang baru, dengan pengaturan berikut:
    • Pintasan Keyboard: ⌥ ←
    • Tindakan: Kirim Sequence Escape
    • Esc +: b
  4. ulangi untuk ⌥ → pintasan keyboard dengan pengaturan berikut:
    • Pintasan Keyboard: ⌥ →
    • Tindakan: Kirim Sequence Escape
    • Esc +: f
Willington Vega
sumber
1
Perlu disebutkan bahwa ini khusus untuk satu terminal emulator tertentu - bukan untuk zsh secara umum.
Hi-Angel
6

Anda mencari kata kunci backward-worddan forward-word. Jadi, jika Anda menggunakan shell di mana keybindings tidak berfungsi coba bindkey -L | grep backward-worduntuk memeriksa apakah mereka bahkan dikonfigurasi. Ada informasi lebih lanjut tentang ini di zshzle (1) .

Anda dapat secara manual mengatur ikatan tombol dengan mengetikkan sesuatu seperti ini:

bindkey ' Ctrl+ v Alt+ Right' kata depan

bindkey ' Ctrl+ v Alt+ Left' kata mundur

Saya memiliki beberapa masalah dengan keybindings juga dan masalahnya hampir selalu bahwa tombol Option / Alt mengirim sesuatu yang berbeda dari Meta / Escape yang diharapkan.

Sebastian Stumpf
sumber
Anda juga dapat menggunakan emacs-forward-worddan emacs-backward-word. Perbedaannya adalah bahwa Anda melompat maju ke akhir kata dan mundur ke awal kata daripada selalu melompat di awal kata.
Aalex Gabi
Yang ini adalah solusi paling kuat dan bersih. Ia dapat beradaptasi dengan berbagai jenis pemetaan kunci dan / atau semua jenis kombinasi ssh-tmux-zsh. Solusi lain yang melibatkan urutan pelarian yang dikodekan dengan keras hanya menyelesaikan beberapa kasus di beberapa sistem tertentu.
HKTonyLee
3

Saya tidak dapat berbicara untuk iTerm tetapi ini adalah keybindings yang saya gunakan untuk menyelesaikan masalah ini di bawah Terminal GNOME, pada Fedora 19, menjalankan ZSH 5.0.7 dengan Oh-my-zsh:

bindkey "\e[1;3C" forward-word
bindkey "\e[1;3D" backward-word

where \e== Escape-key-sequence (seperti yang didokumentasikan pada bagian 4.1.1 )

dan [== O(huruf besar O; seperti yang didokumentasikan pada bagian 4.2.1 ), dalam beberapa kasus. Untuk misalnya dalam tmuxsubstitusi ini diperlukan bagi saya, namun tanpa tmuxitu diperlukan bahwa tidak ada substitusi yang dilakukan dan [==[

Kode kunci untuk suatu urutan dapat diperoleh dengan menggunakan catdan menekan urutan yang diinginkan. Sebagai contoh, hasil dari penekanan <Alt+Right>harus ditafsirkan seperti:

$ cat
^[[1;3C

^[== \e== Escape-key-sequence

[== [tanpa tmuxOR [== O(huruf besar) dengantmux

1;3 == Saya tidak yakin tentang yang ini, tetapi secara logis artinya <Alt>

C == Tombol panah kanan

Kemudian urutan ini diberikan bindkeydalam ~/.zshrcfile untuk persistensi, sebagai argumen pertama, dan terikat , yang berarti bahwa keystroke dalam argumen satu akan menjalankan perintah editor tertentu (atau widget dalam istilah zsh), ke widget, yang pada widget baris contoh di atas adalah forward-word.

The ~/.zshrcharus kembali bersumber setelah dua perintah ini ditambahkan untuk itu dengan:

$ source ~/.zshrc

Sekarang satu gangguan pada sistem saya adalah bahwa kombinasi khusus ini menyebabkan emulator terminal mengeluarkan bunyi bip setiap kali perintah dikeluarkan, ini saya perbaiki dengan menonaktifkannya.

'Edit'->'Profile Preferences'->'Terminal Bell' kotak centang.

rivanov
sumber
1

Apa yang bekerja paling baik untuk saya dalam membuat navigasi baris perintah iTerm2 lebih intuitif bagi saya (saya adalah orang dewasa muda yang tidak tumbuh di baris perintah, tetapi saya telah menghabiskan banyak waktu dalam editor teks dan IDE) adalah untuk:

  • Pergi ke Preferensi -> Profil -> Tombol
  • Di bawah daftar Pemetaan Kunci ada kotak untuk menambah / menghapus atau memuat Preset (kotak kombo)
  • Pilih Natural Text Editingopsi di drop-down Preset.

Ini default kunci editor ke pengaturan yang lebih standar tanpa saya harus memodifikasi setiap opsi secara individual.

loganjones16
sumber
0

Saya sarankan Anda gunakan zkbduntuk mengkonfigurasi keybindings. Saya menggunakannya dan Alt+ Left/ Alt+ Rightberfungsi dengan baik di iTerm2. Lihat zshcontrib(1)detail di zkbd.

Daniel Serodio
sumber