É claro que você não pode mais usar Ctrl + R . Se você consultar o manual do Z Shell, verá que há apenas uma ligação de chave para o widget history-incremental-search-backward no mapa de teclado emacs . Não há ligações de teclas para ele nos mapas de teclado do vi.
Mas, como você também verá ao ler o manual (é o capítulo 18.), adicionar uma ligação de chave é um exercício bastante simples no uso do comando bindkey :
bindkey "^R" history-incremental-search-backward
Você nem precisa usar o comando zle para mapear o widget em uma função do shell, já que esse é um widget padrão.
Se você consultar a resposta para esta mesma pergunta que está no wiki Z Shell , você verá os comandos para adicionar isso especificamente aos keymaps 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 garyjohn aponta , no vi keymap do "comando", o / o caractere está ligado ao widget vi-history-search-backward . A diferença entre esse widget e o widget history-incremental-search-backward é o comportamento do widget que se aplica uma vez que o modo de pesquisa de histórico está . Aqui estão algumas das diferenças que você notará:
- Alternando modos do vi:
- O modo de pesquisa em
history-incremental-search-backwardalterna entre os mapas de tecladomainevicmdquando você chama o widgetvi-cmd-modeenquanto ainda permanece no modo de pesquisa. ie a partir do modoemacspressionando a tecla Esc ou Ctrl + X Ctrl + V alternam o modo de pesquisa entre os mapas de tecladoemacsevicmd. (Invocarhistory-incremental-search-backwarddo mapa de tecladovicmdé, portanto, problemático, a menos que você vincule algo avi-cmd-modeno mapa de tecladovicmdtambém.) - O modo de pesquisa em
vi-history-search-backwardtrata o widgetvi-cmd-modecomoaccept-linee finaliza a pesquisa, entrando novamente no modo de comando do qual você inseriu a pesquisa. i.e. (com as ligações padrão) / entra no modo de busca do modo de comando e Esc retorna ao modo de comando.
- O modo de pesquisa em
- Repetindo uma pesquisa:
- Em
history-incremental-search-backward, os widgetshistory-incremental-search-backwardevi-rev-repeat-searchsão reconhecidos. ie (presumindo que você alterou as ligações como acima) tanto Ctrl + R e N irá procurar por uma linha correspondente. - Em
vi-history-search-backward, apenas o widgetvi-rev-repeat-searché reconhecido. i.e. (presumindo que você tenha alterado as ligações como acima) Ctrl + R causará um bipe e será ignorado.
- Em