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-backwardwidget no emacsmapa 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 bindkeycomando:
bindkey "^R" history-incremental-search-backward
Você nem precisa usar o zlecomando 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-backwardwidget. A diferença entre esse widget e o history-incremental-search-backwardwidget é 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-backwardalterna entre os mapas de teclas maine vicmdquando você invoca o vi-cmd-modewidget enquanto permanece no modo de pesquisa. ou seja, do emacsmodo pressionando a Esctecla ou Ctrl+ XCtrl+ Valterna o modo de busca entre os mapas de teclas emacse vicmd. (Invocando history-incremental-search-backwarda partir do vicmdmapa de teclado é, portanto, problemático, a menos que ligam algo vi-cmd-modeno vicmdmapa de teclado também.)
- O modo de pesquisa
vi-history-search-backwardtrata o vi-cmd-modewidget como accept-linee 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-backwardos vi-rev-repeat-searchwidgets 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-searchwidget é reconhecido. ie (presumindo que você alterou as ligações como acima) Ctrl+ Rcausará um sinal sonoro e será ignorado.
garyjohnmostra uma maneira do Vim de fazer isso eJdeBPmostra 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!