Mencari solusi ALT + LeftArrowKey di zsh

130

Saya baru saja beralih dari bash ke zsh, namun saya merindukan Alt+ LeftArrowKeydan Alt+ saya RightArrowKeyuntuk bolak-balik kata demi kata.

Sekarang, jika saya menekan Alt+ LeftArrowKeysaya mundur beberapa huruf dan kemudian saya macet. Saya tidak akan mundur lebih jauh dan itu tidak akan kembali ke akhir baris dengan Alt+ RightArrowKeyseperti yang saya harapkan. Saya bahkan tidak bisa menggunakan tombol panah untuk pergi ke akhir baris, hanya ke detik hingga terakhir. Tidak dapat memasukkan karakter baru pada baris atau memang menghapus.

Bagaimana cara mendapatkan kembali pintasan kesayangan saya?

Saya menggunakan Mac OS X menggunakan Terminal jika itu penting.

Mads Ohm Larsen
sumber

Jawaban:

243

Jalankan catlalu tekan tombol untuk melihat kode yang dikirim pintasan Anda.
(Tekan Ctrl+ Cuntuk mematikan catketika Anda selesai.)
Bagi saya, (ubuntu, konsole, xterm) menekan Alt+ kirim ^[[1;3D, jadi saya akan memasukkan .zshrc saya

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

(Sebenarnya saya lebih suka menggunakan Ctrl+ panah untuk memindahkan kata demi kata, seperti di kotak teks biasa di bawah windows atau linux gui.)

Pertanyaan terkait: Perbaiki pengaturan kunci (Beranda / Akhiri / Sisipkan / Hapus) di .zshrc saat menjalankan Zsh di Terminator Terminal Emulator

lolesque
sumber
15
Anda adalah penyelamat saya! Di Mac saya "Alt + <-" give "^ [b" dan -> memberi "^ [f", jadi saya menambahkan ini. Bekerja seperti pesona. Ctrl + panah dicadangkan untuk beralih antar desktop di Mac.
Mads Ohm Larsen
1
Satu catatan untuk ctrl + <- cat melaporkan ^[[Duntuk saya sementara ctrl + v melaporkan ^[OD. Saran Ctrl + v berhasil, tetapi cat tidak. Lebih lanjut, ctrl + v melaporkan hal yang sama untuk alt + <- dan alt + ->. Saya dapat menambahkan keduanya dengan melihat output kucing dan mengganti "[[" dengan "O"
Mike S
10
output saya di bawah cat adalah ^[^[[Cuntuk kata maju dan ^[^[[Duntuk kata mundur, tetapi memperbarui ini dalam .zshrc tidak berhasil karena beberapa alasan.
Yunti
2
@Yunti - Menempatkan bindkey "^[^[[D" backward-worddan bindkey "^[^[[C" forward-wordmasuk ~ / .zprofile berhasil untuk saya!
Fernando Espinosa
Pria! Menyelamatkan hidupku! Terima kasih telah berbagi!
Joao Henrique
187

Untuk siapa saja yang menggunakan iTerm, apa pun cangkangnya

Semua solusi yang ditawarkan di sini mengambil pendekatan mundur menurut saya. Anda pada dasarnya memberi tahu shell Anda untuk mendengarkan beberapa urutan esc atau pengikatan kunci lain yang telah Anda atur di terminal Anda, menciptakan masalah kompatibilitas saat Anda mengganti shell (Jika Anda SSH ke shell lain, beralih dari BASH ke ZSH, dll dan Anda kehilangan beberapa jika tidak semua keybindings Anda).

Kebanyakan shell memiliki serangkaian urutan default yang sudah terikat sebelumnya. Selain itu, meskipun tidak 100% konsisten, mereka cukup dekat. Jadi, cara termudah yang saya temukan untuk membuat keybinding untuk tindakan tertentu di shell adalah memberi tahu aplikasi terminal Anda untuk mengikat keybindings default yang konsisten di seluruh shell.

Saya menulis solusi kompresif agar terminal Anda merespons sedekat mungkin dengan keybindings mac asli di sini

Buka preferensi iTerm + ,dan navigasikan ke Profilestab ( Keystab dapat digunakan, tetapi menambahkan pengikatan tombol ke profil Anda memungkinkan Anda untuk menyimpan profil Anda dan menyelaraskannya ke beberapa komputer) dan keyssub-tab dan masukkan yang berikut:

Pindahkan kursor satu kata ke kiri

+ Kirim Kode Hex:0x1b 0x62

Pindahkan kursor satu kata ke kanan

+ Kirim Kode Hex:0x1b 0x66

Dan itu akan memberi Anda perilaku yang diinginkan tidak hanya di ZSH, tetapi juga jika Anda SSH ke server yang menjalankan BASH, irb / pry, node, dll.

Travis
sumber
1
Saya mengalami masalah dengan solusi yang diterima karena saya memiliki zsh yang berfungsi dengan baik tetapi tidak irb dan konsol lain. Menghapus pengaturan sebelumnya (di profil iTerm seperti yang disarankan) bekerja seperti pesona!
llekn
1
solusi bindkey akan membuat suara error yang mengganggu di Mac. Ini harus menjadi cara yang tepat untuk melakukannya.
Weishi Zeng
@Lev Kemungkinan karena shell Anda tidak dipetakan ke konfigurasi default. Jalankan bindkey | grep forward-wordAnda harus melihat "^[f" forward-wordkembali tetapi jika tidak, Anda memiliki 2 opsi. peta ke salah satu dari yang lain yang dikembalikan, atau tambahkan "^[f" forward-wordke .zshrc.
Travis
Saya akan mencatat, itu "^[f"tampaknya yang paling konsisten digunakan mengikat untuk forward-worddigunakan di seluruh shell, dan satu-satunya yang ditetapkan secara default dalam versi bash saya.
Travis
Entah bagaimana itu bekerja dengan tombol perintah untuk saya, bukan opsi. Terima kasih sobat. :)
Vaibhav Jain
72

Menambahkan yang berikut ke ~ / .zshrc berhasil untuk saya di OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
Rob Sawyer
sumber
4
Solusi ini memicu "bel" di iTerm 2 setiap kali digunakan, jadi beralih antar kata bisa sangat mengganggu.
Matthew Morek
1
ada yang tahu cara menonaktifkan ini agar tidak terjadi ^ @MatthewMorek
Daniel Kobe
18
'\ e \ e' mencegah bel. Konfigurasi saya di El Capitan dengan iTerm 2 dalam mode kompatibilitas Terminal adalah bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum
Terima kasih, ini menyelesaikan masalah di macOs Sierra. Saya tidak mendapatkan suara bel apa pun di Terminal atau iTerm2.
Raspo
Bagaimana Anda mengaturnya untuk berpindah dari akhir kata dan bukan awal atau mereka?
Mafro34
23

Pada MacOS High Siera 10.13.6 atau Mojave 10.14.2 dan menggunakan iTerm2 dengan ZSH Untuk berpindah dari kata-kata, saya harus mengatakan seperti ini:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Solusi lain tidak berhasil untuk saya

Vetalll
sumber
1
Ini adalah satu-satunya solusi yang berhasil untuk saya juga. Terima kasih! Mac OS Mojave
jamescampbell
Bekerja di OS Catalina juga!
Reed Richards
7

Meskipun tidak menjawab pertanyaan Anda secara ketat, default mengikat untuk forward-worddan backward-wordadalah alt-fresp. alt-b.

Ini berfungsi di mana-mana, tidak mengharuskan Anda meninggalkan baris beranda, dan memiliki properti mnemonik yang bagus (f = maju, b = mundur), sementara juga konsisten dengan ctrl-fdan ctrl-bsedang forward-characterdan backward-character.

Sobek tombol panah Anda!

0x89
sumber
4
tidak bekerja untuk saya di zsh / iterm2, print ƒ dan ∫ (cb cf works).
Davorin
2

Untuk membuatnya bekerja untuk saya, saya menggunakan jawaban ini , namun saya harus menukar kode (kiri <-> kanan)

⌥ + ← Kirim Kode Hex: 0x1b 0x66
⌥ + → Kirim Kode Hex: 0x1b 0x62

dan tambahkan yang berikut ini ke saya ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
iRonin
sumber
Bisa dibilang tidak terlalu membingungkan jika Anda mengubah bindkeys Anda , untuk mengikat ^[fke forward-word, dan tidak ke backward-word.
Nickolay
1

Pada Mavericks (10.9.4) kodenya adalah 1; 5 ... jadi untuk mengikat alt dengan panah saya memiliki .zshrc saya menggunakan ini:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

Anda dapat menggunakan CTRL + V lalu perintah yang ingin Anda gunakan

di Yosemite gunakan solusi Rob

ZeoS
sumber
1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie
0

Di zsh, Anda dapat menggunakan bindkeyperintah untuk melihat pintasan keyboard.

Gunakan bindkeyuntuk menjelajahi opsi yang tersedia tanpa keybindings kustom.

Yaitu ^[b untuk memundurkan sebuah kata dan ^[funtuk memajukan sebuah kata.

MCI
sumber