Claro que você não pode mais usar o Ctrl+ R. Se você consultar o manual do Z Shell, verá que há apenas uma ligação de chave para o history-incremental-search-backward
widget no emacs
mapa de teclas . Não há ligações de teclas para ele nos mapas de teclas do vi.
Mas como você também encontrará na leitura do manual (é o capítulo 18.), adicionar uma ligação de chave é um exercício bastante simples no uso do bindkey
comando:
bindkey "^R" history-incremental-search-backward
Você nem precisa usar o zle
comando para mapear o widget em uma função shell, pois esse é um widget padrão.
Se você consultar a resposta para essa mesma pergunta que está no wiki do Z Shell , verá os comandos para adicioná-lo especificamente aos mapas de teclas vi "command" e "insert mode":
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Observe também que, como aponta garyjohn , no mapa de teclas do "comando" do vi, o /caractere está vinculado ao vi-history-search-backward
widget. A diferença entre esse widget e o history-incremental-search-backward
widget é o comportamento do widget que se aplica quando o usuário está no modo de pesquisa de histórico. Aqui estão algumas das diferenças que você notará:
- Alternando os modos vi:
- O modo de pesquisa
history-incremental-search-backward
alterna entre os mapas de teclas main
e vicmd
quando você invoca o vi-cmd-mode
widget enquanto permanece no modo de pesquisa. ou seja, do emacs
modo pressionando a Esctecla ou Ctrl+ XCtrl+ Valterna o modo de busca entre os mapas de teclas emacs
e vicmd
. (Invocando history-incremental-search-backward
a partir do vicmd
mapa de teclado é, portanto, problemático, a menos que ligam algo vi-cmd-mode
no vicmd
mapa de teclado também.)
- O modo de pesquisa
vi-history-search-backward
trata o vi-cmd-mode
widget como accept-line
e encerrará a pesquisa, retornando ao modo de comando do qual você inseriu a pesquisa. ie (com as ligações padrão) /entra no modo de pesquisa no modo de comando e Escvolta ao modo de comando.
- Repetindo uma pesquisa:
- Em
history-incremental-search-backward
, history-incremental-search-backward
os vi-rev-repeat-search
widgets e são reconhecidos. ie (presumindo que você alterou as ligações como acima) ambos Ctrl+ Re Nprocurará uma linha correspondente anterior.
- Em
vi-history-search-backward
, apenas o vi-rev-repeat-search
widget é reconhecido. ie (presumindo que você alterou as ligações como acima) Ctrl+ Rcausará um sinal sonoro e será ignorado.
garyjohn
mostra uma maneira do Vim de fazer isso eJdeBP
mostra como recuperar as teclas pressionadas por Ctrl + R! Vou jogar com os dois métodos e aceitar uma resposta mais tarde. Decidirei com base em 1) qual método me parece mais fácil e 2) que obtém mais votos positivos. Graças a vocês dois!