Estou usando o zsh e, como sou um usuário ávido do Vim, mudei para a edição no estilo Vim na linha de comando. (Isso significa que, se eu digitar ls foo/bar
e decidir que deseja cd
, posso pressionar Esc ^
para voltar ao início e cw cd
mudar ls
para cd
.
Tudo isso é ótimo, mas o problema é que não posso mais usar Ctrl+R
para fazer uma pesquisa recursiva no histórico. Existe outra maneira de fazer isso ou posso, de alguma forma, substituir o atalho de teclas do Vim para recuperá-lo?
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!Respostas:
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 noemacs
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: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":
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 ohistory-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á:history-incremental-search-backward
alterna entre os mapas de teclasmain
evicmd
quando você invoca ovi-cmd-mode
widget enquanto permanece no modo de pesquisa. ou seja, doemacs
modo pressionando a Esctecla ou Ctrl+ XCtrl+ Valterna o modo de busca entre os mapas de teclasemacs
evicmd
. (Invocandohistory-incremental-search-backward
a partir dovicmd
mapa de teclado é, portanto, problemático, a menos que ligam algovi-cmd-mode
novicmd
mapa de teclado também.)vi-history-search-backward
trata ovi-cmd-mode
widget comoaccept-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.history-incremental-search-backward
,history-incremental-search-backward
osvi-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.vi-history-search-backward
, apenas ovi-rev-repeat-search
widget é reconhecido. ie (presumindo que você alterou as ligações como acima) Ctrl+ Rcausará um sinal sonoro e será ignorado.fonte
No modo vi do bash, digitar
<Esc>/<string><Enter>
pesquisará o histórico de comandos<string>
.n
procurará mais na história;N
irá procurar para a frente. O zshell pode ser o mesmo.fonte
Eu prefiro usar:
Dessa forma, eu posso digitar
ESC /text
e ver a linha de comando. Se eu quiser ir para a próxima partida, digitoESC n
fonte