navegação no histórico semelhante ao zsh tcsh

navegação no histórico semelhante ao zsh tcsh

Em tcsh, os comandos \ePe \eNlevam em consideração o prefixo normalizado por espaços em branco da linha atual, não apenas a primeira palavra.

Por exemplo, se meu histórico contiver

git pull upstream feature-dancing-pigs
git clone

e eu digito

% git pull

e então acertei \eP, tcsheu recebo

% git pull upstream feature-dancing-pigs

se eu acertar \eP, zshrecebo um item do histórico que corresponde apenas ao comando

% git clone

Quero configurar zshpara emular o tcshcomportamento. É possível?

Eu tentei zshcom a configuração de chave padrão do emacs e com uma configuração explícita

bindkey "\eP" history-search-backward

Acontece que

bindkey "\eP" history-beginning-search-backward

tem o comportamento esperado que eu estava usando ^[inicialmente no lugar de \e.

Responder1

Há uma função documentada em zshcontribchamada up-line-or-beginning-search, você pode ver isso executando.

man zshcontrib | less '+/^\s*up-line-or-beginning-search'

Esses widgets são semelhantes às funções integradas up-line-or-search e down-line-or-search: se estiverem em um buffer multilinha, eles se movem para cima ou para baixo dentro do buffer, caso contrário, eles procuram uma linha de histórico que corresponda ao início do buffer. linha atual. Neste caso, porém, eles procuram uma linha quecorresponde à linha atual até a posição atual do cursor, na forma de história-começando-pesquisa-para trás e para frente,em vez da primeira palavra na linha.

se você olhar as instruções fornecidas no topo da ZLE FUNCTIONSseção emman zshcontrib


Widgets de FUNÇÕES ZLE
Todas essas funções implementam widgets ZLE definidos pelo usuário (veja zshzle(1)) que podem ser vinculados a pressionamentos de teclas em shells interativos. Para usá-los, seu .zshrc deve conter linhas no formato
autoload function
zle -N function

Pessoalmente, segui as instruções acima, mas suspeito que hoje em dia você não precise...~/.zshrc

# register the function with the autoloader
autoload -U up-line-or-beginning-search
# define new zle widget
zle -N up-line-or-beginning-search
# bind UP key
[[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-beginning-search

informação relacionada