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.