Zsh'da ALT + LeftArrowKey çözümü aranıyor


131

Kısa bir süre önce bash'den zsh'a geçtim, ancak bir seferde bir kelime ileri geri gitmek için Alt+ LeftArrowKeyve Alt+ ' RightArrowKeyyı özlüyorum .

Şu anda, Alt+ tuşuna basarsam LeftArrowKeybirkaç harf geri giderim ve sonra sıkışırım. Daha fazla geriye gitmeyeceğim ve beklediğim gibi Alt+ ile satırın sonuna geri dönmeyecek RightArrowKey. Satırın sonuna gitmek için ok tuşlarını bile kullanamıyorum, sadece sondan ikinciye. Satıra yeni karakterler girilemez veya gerçekten silinemez.

Sevgili kısayolumu nasıl geri alabilirim?

Önemliyse Mac OS X'te Terminal kullanıyorum.

Yanıtlar:


244

Çalıştırın catve kısayolunuzun gönderdiği kodları görmek için tuşlara basın.
( İşiniz bittiğinde öldürmek için Ctrl+ ' Cya basın cat.)
Benim için (ubuntu, konsole, xterm) Alt+ göndermeye basmak ^[[1;3D, böylece .zshrc yazacağım

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

(Aslında Ctrl, windows veya linux gui altındaki normal bir metin kutusunda olduğu gibi, kelime kelime hareket etmek için + oku kullanmayı tercih ederim .)

İlgili soru: Terminator Terminal Emulator'da Zsh çalıştırırken .zshrc'deki anahtar ayarlarını (Home / End / Insert / Delete) düzeltin


16
Sen benim kurtarıcımsın! Mac'imde "Alt + <-" "^ [b" verdi ve -> "^ [f" verdi, ben de bunları ekledim. Tıkır tıkır çalışıyor. Ctrl + oklar, Mac'te masaüstleri arasında geçiş yapmak için ayrılmıştır.
Mads Ohm Larsen

1
Bir not, ctrl + <- cat ^[[Diçin ctrl + v rapor ederken benim için rapor veriyordu ^[OD. Ctrl + v'nin önerisi işe yaradı, ancak kedi işe yaramadı. Ayrıca, ctrl + v hem alt + <- hem de alt + -> için aynı şeyi bildiriyordu. Bu ikisini, kedinin çıktısına bakarak ve herhangi bir "[[" "O" ile değiştirerek ekleyebildim
Mike S

10
cat altındaki çıktım ^[^[[Cileri sözcük ve ^[^[[Dgeri sözcük içindir, ancak bunlar için .zshrc içindeki güncelleme bir nedenle çalışmadı.
Yunti

2
@Yunti - koymak bindkey "^[^[[D" backward-wordve bindkey "^[^[[C" forward-wordiçinde ~ / .zprofile benim için çalıştı!
Fernando Espinosa

Adam! Hayatımı kurtardı! paylaşım için teşekkürler!
Joao Henrique

187

Kabuktan bağımsız olarak iTerm kullanan herkes için

Burada sunulan tüm çözümler bence geriye dönük bir yaklaşım sergiliyor. Esasen, kabuğunuza terminalinizde ayarladığınız bazı esc sıralarını veya diğer anahtar bağlamaları dinlemesini söylüyorsunuz, kabukları değiştirdiğinizde uyumluluk sorunları yaratıyorsunuz (Başka bir kabuğa SSH yaparsanız, BASH'dan ZSH'ye geçiş yapın, vb. Ve kaybedersiniz. bazı tuş atamalarınız olmasa bile).

Çoğu kabuk, önceden bağlanmış bir dizi varsayılan diziye sahiptir. Dahası,% 100 tutarlı olmasalar da, yeterince yakındırlar. Dolayısıyla, kabuktaki belirli bir eylem için tuş bağlama oluşturmanın bulduğum en kolay yolu, terminal uygulamanıza kabuklar arasında tutarlı olan varsayılan tuş atamalarına bağlanmasını söylemektir.

Ben yerli mac keybinding için yakın olarak yanıt verdiklerini sizin terminali almak için basınç çözüm yazdı Burada

Aç iTerm tercihleri + ,ve gezinme Profilessekmesi ( Keyssekme kullanılır, ancak ekleyerek profilinize keybinding yapmanıza olanak verir edilebilir Profilinizi kaydetmek birden bilgisayarlara ve senkronizasyon) ve keysalt sekmesinde ve aşağıdakileri girin:

İmleci bir kelime sola taşı

+ Hex Kodlarını Gönder:0x1b 0x62

İmleci bir kelime sağa taşı

+ Hex Kodlarını Gönder:0x1b 0x66

Ve bu size sadece ZSH'de değil, aynı zamanda BASH, irb / pry, node vb. Çalıştıran bir sunucuya SSH verirseniz istenen davranışı vermelidir.


1
Kabul edilen çözümle ilgili sorun yaşıyordum çünkü zsh iyi çalışıyordu ama irb ve diğer konsollar yoktu. Önceki ayarları silmek (önerildiği gibi iTerm profilinde) bir sihir gibi çalışır!
llekn

1
bindkey çözümü, Mac'te can sıkıcı hata sesi çıkarır. Bunu yapmanın doğru yolu bu olmalı.
Weishi Zeng

@Lev Muhtemelen kabuğunuz varsayılan yapılandırmaya eşlenmediği için. Run döndüğünü bindkey | grep forward-wordgörmelisiniz, "^[f" forward-wordancak yoksa 2 seçeneğiniz var. iade başkalarının birine haritasına veya eklemek "^[f" forward-wordadresinden Müşteri .zshrc.
Travis

Bunun kabuklar "^[f"arasında en tutarlı olarak kullanılan bağlama olduğunu forward-wordve benim bash sürümümde varsayılan olarak tek set olduğunu not edeceğim.
Travis

Bir şekilde seçenek yerine benim için komut düğmesiyle çalıştı. Teşekkürler dostum. :)
Vaibhav Jain

72

Aşağıdakileri ~ / .zshrc'ye eklemek OSX Mountain Lion'da benim için çalıştı.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
Bu çözüm iTerm 2'de her kullanımda bir "zili" tetikler, bu nedenle kelimeler arasında geçiş yapmak gerçekten can sıkıcı olabilir.
Matthew Morek

1
herkes bunun olmasını nasıl engelleyeceğini çözebilir ^ @MatthewMorek
Daniel Kobe

18
'\ e \ e' zili engeller. Terminal uyumluluk modunda iTerm 2 ile El Capitan'daki yapılandırmam bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum

Teşekkürler, bu, macOs Sierra'daki sorunu çözdü. Terminal veya iTerm2'de herhangi bir zil sesi alamıyorum.
Raspo

Onu kelimelerin başından ya da başından değil sonundan hareket edecek şekilde nasıl ayarlıyorsunuz?
Mafro34

23

MacOS High Siera 10.13.6 veya Mojave 10.14.2'de ve iTerm2'yi ZSH ile kullanma Kelimelerden şu şekilde hareket etmek için:

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

Başka bir çözüm işe yaramıyor


1
Benim için de işe yarayan tek çözüm budur. Teşekkür ederim! Mac OS Mojave
jamescampbell

OS Catalina'da da çalışıyor!
Reed Richards

7

Kesinlikle sizin soruya cevap olmasa da, varsayılan için bağlayıcı forward-wordve backward-wordvardır alt-fsolunum. alt-b.

Bu çalışmalar, her yerde aynı zamanda tutarlı olurken, ev satır terk etmenizi gerektirir ve güzel bir anımsatıcı özelliği (f = ileri, b = arka) sahiptir vermez ctrl-fve ctrl-bvarlık forward-characterve backward-character.

Ok tuşlarınızı çıkarın!


4
benim için zsh / iterm2'de çalışmıyor, ƒ ve ∫ yazdırıyor (cb cf çalışıyor).
Davorin

2

Benim için çalışmasını sağlamak için bu cevabı kullandım , ancak kodları değiştirmem gerekiyordu (sol <-> sağ)

⌥ + ← Hex Kodları Gönder: 0x1b 0x66
⌥ + → Hex Kodları Gönder: 0x1b 0x62

ve aşağıdakileri ekleyin ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

Bu tartışmalı az sizin değişirse kafa karıştırıcı olacağını bindkeybağlamak yerine s ^[fiçin forward-worddeğil, için backward-word.
Nickolay

1

Mavericks'te (10.9.4) kod 1; 5 ... yani alt'ı oklarla bağlamak için .zshrc'mi şunu kullanıyorum:

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

CTRL + V'yi ve ardından kullanmak istediğiniz komutu kullanabilirsiniz.

Yosemite'de Rob'un çözümünü kullanın


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie

1

Zsh'da bindkeyklavye kısayollarını görmek için komutu kullanabilirsiniz .

bindkeyÖzel tuş atamaları olmadan kullanılabilen seçenekleri keşfetmek için kullanın .

Yani ^[b bir kelimeyi geri almak ve ^[fbir kelimeyi ilerletmek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.