É 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-backward
alterna entre os mapas de tecladomain
evicmd
quando você chama o widgetvi-cmd-mode
enquanto ainda permanece no modo de pesquisa. ie a partir do modoemacs
pressionando a tecla Esc ou Ctrl + X Ctrl + V alternam o modo de pesquisa entre os mapas de tecladoemacs
evicmd
. (Invocarhistory-incremental-search-backward
do mapa de tecladovicmd
é, portanto, problemático, a menos que você vincule algo avi-cmd-mode
no mapa de tecladovicmd
também.) - O modo de pesquisa em
vi-history-search-backward
trata o widgetvi-cmd-mode
comoaccept-line
e 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-backward
evi-rev-repeat-search
sã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