Como faço uma pesquisa reversa do histórico no modo vi do ZSH?

43

Eu uso vim para essencialmente todas as minhas necessidades de edição, então eu decidi tentar novamente o modo vi para o meu shell (atualmente ZSH com oh-my-zsh no OS X), mas eu me vejo tentando (e falhar) usar Ctrl-R constantemente. Qual é a ligação de chave equivalente? E para referência futura, como eu mesmo descobriria isso? Tenho certeza que eu poderia usar bind -P no bash.

    
por Hank Gay 27.07.2012 / 13:30

2 respostas

49

Você pode executar bindkey sem argumentos para obter uma lista de ligações existentes, por exemplo:

# 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

No modo emacs, a ligação desejada é history-incremental-search-backward , mas isso não é vinculado por padrão no modo vi. Para vincular o Ctrl-R a si mesmo, você pode executar esse comando ou adicioná-lo ao seu ~/.zshrc :

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

O zshzle manpage ( man zshzle ) tem mais informações sobre os modos de editor de linhas, bindkey e emacs / vi do zsh.

    
por 27.07.2012 / 15:43
17

Esta é uma questão antiga, mas a única (e aceita) resposta basicamente diz a alguém como transplantar o modo " history-incremental-search-backward " para o modo vi do "emacs". Embora isso seja perfeitamente factível e possa ser a solução certa para você, é um pouco estranho que ninguém tenha mencionado a “maneira vi” de pesquisar a história.

O modo vi em zsh suporta o histórico de pesquisa usando as chaves vi / vim padrão: / e ? , ambos disponíveis no modo de comando. (Hit <Esc> para mudar de inserir para o modo de comando, assim como no vi ou vim.)

No entanto, o sentido deles é invertido: como você geralmente deseja pesquisar o histórico de seu shell ao contrário, / faz uma pesquisa inversa, enquanto ? faz uma pesquisa direta.

Quando o primeiro hit for exibido, você poderá (assim como no vi / vim) usar n para continuar encontrando mais ocorrências na mesma direção, ou N para reverter a direção da pesquisa.

Os atalhos de teclado padrão relevantes no mapa de teclado vicmd são:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search
    
por 01.04.2016 / 17:08