Estou gostando muito da velocidade geral do zsh, mas duas coisas me incomodam.
- Eu tenho que pressionar esperar um momento entre pressionar escape e pressionar barra para acessar a pesquisa do histórico (se ele pressionar barra muito rapidamente, será exibido
zsh: do you wish to see all 514 possibilities (172 lines)
) - Depois de entrar no modo de inserção por causa de pressionar
a
ouA
, não consigo voltar atrás do ponto em que entrei no modo de inserção.
Eu sei que 2 é como o vi clássico, mas eu gosto mais do estilo vim.
command-line
zsh
Chas. Owens
fonte
fonte
i
duas vezes para voltar ao modo de inserção, eu recomendo essa correção!Respostas:
(1) Por alguma razão, bindkey se comporta de maneira estranha quando se trata de "/":
<esc>
seguido rapidamente por/
é interpretado como<esc-/>
. (Observei esse comportamento no outro dia; não tenho certeza do que o causa.) Não sei se isso é um bug ou um recurso, e se é um recurso, se ele pode ser desativado, mas você pode contorná-lo com bastante facilidade .Provavelmente, essa combinação de teclas está vinculada
_history-complete-older
, o que está gerando um resultado indesejável - você pode usarbindkey -L
para ver se esse é o caso.De qualquer forma, se você não se importa de sacrificar a ligação real
<esc-/>
(pressionada em conjunto, como um acorde), é possível vinculá-la novamente ao comando de pesquisa de histórico do modo vi, para que a digitação<esc>
seguida por/
faça o mesmo em qualquer digitação Rapidez. =)Como isso será tratado como um acorde, não terá o efeito de entrar primeiro no modo de comando vi, portanto, teremos que garantir que isso aconteça primeiro. Primeiro, você precisa definir uma função; coloque-o em algum lugar do seu
fpath
se você o usar ou no seu .zshrc caso contrário:O resto vai no seu .zshrc de qualquer maneira:
Deveria estar bom para ir.
(2) Você pode corrigir a tecla backspace da seguinte maneira:
Além disso, se você deseja um comportamento semelhante para outros comandos do estilo vi:
fonte
^[/
não\e/
, mas essas são as duas formas válidas de dizer fuga. A mudança funciona perfeitamente. Agora que estou jogando com ele mais completamente, parece que o modo vi do zsh é péssimo em comparação com o bash (ou pelo menos não está totalmente configurado por padrão). Um exemplo disso é o fato de o colocar no modo de inserção após o histórico de pesquisa. Eu tenho que voltar ao modo de comando para pressionar n para encontrar o próximo item de pesquisa..vi-history-search-backward
. Vou escrever e editar minha resposta - volte hoje mais tarde.bindkey | grep <searchterm>
para qualquer um dos termos, todos são prefixados porvi-
. Preciso configurarbindkey
comandos que não sejam prefixadosvi-
?Vou abordar apenas a questão (1).
Seu problema é KEYTIMEOUT. Cito zshzle (1):
0,4s é o atraso que você está enfrentando depois de pressionar ESC. A correção é definir KEYTIMEOUT até 0,01s em um dos arquivos de inicialização do shell:
Infelizmente, isso tem um efeito indireto: outras coisas começam a dar errado ...
Primeiro, agora existe um problema no modo de comando vi: digitar ESC faz com que o cursor seja interrompido e, em seguida, o caractere digitado a seguir é engolido. Isso ocorre porque o ESC não está vinculado a nada por padrão no modo de comando vi, mas existem widgets com vários caracteres que começam com ESC (teclas do cursor!). Então, quando você pressiona ESC, o ZLE aguarda o próximo caractere ... e o consome.
A correção é ligar o ESC a algo no modo de comando, garantindo assim que o algo seja passado para o ZLE após $ KEYTIMEOUT centisegundos. Agora podemos manter as ligações começando com ESC no modo de comando sem esses efeitos nocivos. Vinculo ESC ao caractere bell, que considero menos invasivo do que a inserção automática (e meu shell é silenciado):
Próximo problema: por padrão, existem widgets de duas teclas iniciando em ^ X no modo de inserção vi; eles se tornarão inutilizáveis se $ KEYTIMEOUT estiver definido até o fim. O que faço é desvincular ^ X no modo vi insert (é auto-inserir por padrão); isso permite que esses widgets de duas chaves continuem funcionando.
Você perde a ligação para a inserção automática, mas pode vinculá-la a outra coisa, é claro. (Não, pois não tenho utilidade para isso.)
O último problema (que encontrei até agora): Existem algumas combinações de teclas padrão restantes que "perdemos" devido à configuração de $ KEYTIMEOUT logo abaixo, ou seja: aquelas que começam com ESC no modo de inserção vi que não são teclas de cursor. Pessoalmente, eu os religuei para começar com ^ X:
fonte