ZSH'nin vi-modunda ters geçmiş araması nasıl yapabilirim?


47

Kullandığım vimbir kez daha benim kabuk (OS X üzerinde / oh-my-zsh w anda ZSH) için vi-modu denemek karar, esasen tüm düzenleme ihtiyaçları için, ama kendimi kullanmaya çalışıyor (ve başarısız) bulabilirsiniz Ctrl-Rsürekli. Eşdeğer anahtar bağlama nedir? Ve gelecekteki referans için, bunu kendim nasıl çözerim? bind -PBash kullanabileceğimden eminim .


2
'Man zshzle' ifadesine göre, tarih-artımlı arama-geri-arama Vi modlarında (vicmd, viins) varsayılan olarak bağlı değildir.
— Paul,

Yanıtlar:


56

bindkeyMevcut ciltlemelerin bir listesini almak için hiçbir argüman olmadan koşabilirsiniz , örneğin:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

Emacs modunda, istediğiniz bağlama history-incremental-search-backward, ancak vi modda varsayılan olarak bağlı değildir. Ctrl-R'yi kendiniz bağlamak için bu komutu çalıştırabilir veya kendinize ekleyebilirsiniz ~/.zshrc:

bindkey "^R" history-incremental-search-backward

zshzleManpage ( man zshzle) ZSH satır düzenleyici, bindkey, ve emacs / vi modları ile ilgili daha fazla bilgi vardır.


3
Özellikle için teşekkürler zshzle. Bu oldukça bilgilendirici ve kullanışlıdır.
— Hank Gay,

Seni seviyorum. Ciddi anlamda. OSX El Capitan'a geçtikten sonra ters arama yapıldı ve günlük iş akışımda her şeyden daha fazlasını özledim.
— Christian,

24

Bu eski bir sorudur, ancak tek (ve kabul edilen) cevap temelde “emacs benzeri” history-incremental-search-backwardnin vi moduna nasıl aktarılacağını anlatmaktadır . Bu mükemmel bir şekilde yapılabilir ve sizin için doğru çözüm olsa da, kimsenin tarih aramada “vi yolundan” bahsetmemesi biraz garip.

zsh'daki vi modu, standart vi / vim tuşlarını kullanarak geçmişin aranmasını destekler: /ve ?her ikisi de komut modunda bulunur. ( <Esc>Tıpkı vi veya vim'deki gibi, komuttan komut moduna geçmek için vurun .)

Onların hisleri tersine çevrilmiş olsa da: Kabuk geçmişinizi genellikle tersten aramak istediğiniz için, geriye /doğru arama ?yapar, ileriye doğru arama yapar.

İlk vuruş görüntülendiğinde, naynı yönde daha fazla isabet bulmaya devam Netmek veya aramanın yönünü tersine çevirmek için (vi / vim'deki gibi) kullanabilirsiniz .

Tuş haritasındaki alakalı varsayılan tuş bağlantıları vicmdşunlardır:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
Ayrıca kullanmak "^P" history-beginning-search-backwardve "^N" history-beginning-search-forwardvim benzeri otomatik tamamlama için de iyidir (yazmaya başlayın, sonra ctrl+pveya tuşuna basın ctrl+n).
— cprn

Benim için ?getiriyor bck-i-search, tam olarak aradığım şey buydu. Teşekkür ederim.
— geowa4

@wjv, geçmişe göre artan geriye doğru arama işleminin avantajı glob kalıplarını desteklemesidir. Varsayılan /veya `? ' mu: coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
— alpha_989 15:18

@ alpha_989 Başvurduğunuz blog yazısı yanlış. Yazarın, anahtar bağlama işlemini aşırı yükleyen bir zsh “çerçevesi” yüklü olabilir ^R. Her iki tarafından desteklenen tek “regex benzeri” karakteri history-search-backwardve history-incremental-search-backwardbir ^satırın başlangıcına arama dizesini demirlemek için. Asıl gücü history-incremental-search-backward, adından da anlaşılacağı gibi, artan bir arama yapıyor olmasıdır. Birinin vicmdbu sebeple onu anahtar haritaya bağlamak isteyebileceğini hayal edebiliyorum .
— wjv

@wjv, doğru .. ben yazdım gerektiğini edilir history-incremental-pattern-search-backwarddeğil history-incremental-search-backward. history-incremental-pattern-search-backwardsbelki bir widget .. ama varsayılan olarak zsh olarak yüklenmiş olarak geldiğini düşünüyorum. Doğru bir şekilde belirttiğiniz şekilde globolmayan kalıpları destekler regex: zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators .
— Gönderide
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.