zsh: preenche a entrada de pesquisa com o conteúdo da linha existente quando ^ R é pressionado?

2

Dado .zshrc config:

bindkey -v
bindkey "^R" history-incremental-pattern-search-backward

Quando digito foo<^R>bar em um prompt vazio, ele procura o comando mais recente correspondente a bar .

Como posso fazer ^ R usar a entrada de prompt existente? Ou seja com essa seqüência de teclas que eu quero corresponder foobar .

    
por Plato 27.11.2018 / 22:13

1 resposta

2

Se você vincular ^R a history-beginning-search-backward , chegará perto, mas isso não é uma pesquisa de padrões.

Você pode vincular ^R a uma função que adiciona o conteúdo atual da linha como o padrão de pesquisa inicial.

history-incremental-pattern-search-backward-from-line () {
  zle history-incremental-pattern-search-backward $BUFFER
}
zle -N history-incremental-pattern-search-backward-from-line
bindkey -M viins "^R" history-incremental-pattern-search-backward-from-line
bindkey -M vicmd "^R" history-incremental-pattern-search-backward-from-line
bindkey -M isearch "^R" history-incremental-pattern-search-backward

(Você precisa dessa vinculação ao isearch map porque, caso contrário, um ^R repetido basearia sua pesquisa na linha que você encontrou até agora, em vez de repetir a pesquisa atual.)

    
por 27.11.2018 / 22:51