Você está usando o zsh no modo vi.
Para resolver seu problema, dividimos o problema em duas partes
1. part - linhas de histórico de comando de impressão que correspondem a um padrão
Para isso, criamos um arquivo ~/bin/history-print-regexp.sh
contendo:
#!/bin/zsh
# command 'regular-expression' number-of-lines(counting from the end of the file)
nmbr=15
if [ "$#" -eq 2 ]; then
nmbr=$2
fi
if [ "$#" -eq 0 ]; then
echo "You need at least one argument"
echo "Usage command regexp outputlinesCount"
fi
#tac - reverse print , grep -E - use extended regexp, cut -d ';' use ; as delimiter
#and print second field (-f 2), uniq -u print only unique lines
tac ~/.histfile | grep -E $1 | cut -d ';' -f 2 | uniq -u | head -n $nmbr
Agora precisamos trabalhar com o seu comando atual. Para isso fazemos:
Enquanto estiver no modo normal zsh vi, pressione o botão v
duas vezes e a janela vi será aberta.
No seu arquivo ~ / .vimrc você coloca esta função
function! ShowHistoryMatching(pattern)
10new
exe 'r!' . "history-print-regexp.sh " . a:pattern
call cursor(1,1)
endfunction
:cnoremap ch call ShowHistoryMatching
O uso deste script é, enquanto estiver no editor zsh total vi editando seu comando atual, você pressiona :ch
, que é estendido para: chamar ShowHistoryMatching
e você adiciona ("padrão") a isto e aperta Enter e os resultados abrem na janela acima. De lá você pode facilmente copiar uma linha desejada para sua segunda janela.
C-w,q
fecha uma janela
C-w,j
vai para a janela abaixo.