Realmente me gusta la velocidad general de zsh, pero dos cosas me están molestando.
- Tengo que esperar un momento entre golpear y escapar para llegar a la búsqueda de historial (si golpea con demasiada rapidez, dice
zsh: do you wish to see all 514 possibilities (172 lines)
) - Después de entrar en el modo de inserción debido a golpear
a
oA
, No puedo retroceder más allá del punto en el que ingresé al modo de inserción.
Sé que 2 es como el vi clásico, pero me gusta más el estilo vim.
command-line
zsh
Chas. Owens
fuente
fuente
i
dos veces para volver al modo de inserción, recomiendo altamente esta ¡fijar!Respuestas:
(1). Por alguna razón, bindkey se comporta de manera extraña cuando se trata de "/":
<esc>
seguido rápidamente por/
se interpreta como<esc-/>
. (Observé este comportamiento el otro día; no estoy muy seguro de cuál es su causa). No sé si se trata de un error o una característica, y si es una característica si puede desactivarse, pero puede solucionarlo con bastante facilidad. .Esta combinación de teclas probablemente está vinculada a
_history-complete-older
, que está generando el resultado no deseado - puedes usarbindkey -L
Para ver si este es el caso.En cualquier caso, si no te importa sacrificar el real
<esc-/>
(presionado juntos, como un acorde) enlace, puede volver a enlazarlo al comando de búsqueda de historial en modo vi, de modo que al escribir<esc>
seguido por/
hace lo mismo a cualquier velocidad de escritura. =)Como esto se tratará como un acorde, no tendrá el efecto de ingresar primero al modo de comando vi, por lo que tendremos que asegurarnos de que eso suceda primero. Primero, necesitas definir una función; ponlo en algún lugar de tu
fpath
si usa eso, o póngalo en su .zshrc de lo contrario:El resto va en tu .zshrc de cualquier manera:
Debería ser bueno para ir.
(2). Puede corregir la tecla de retroceso de la siguiente manera:
Además, si desea un comportamiento similar para otros comandos de estilo vi:
fuente
^[/
no\e/
, pero esas son ambas formas válidas de decir escapar. El cambio funciona perfectamente. Ahora que estoy jugando con él más completamente, parece que el modo vi de zsh apesta en comparación con el de bash (o al menos no está completamente configurado de forma predeterminada). Un ejemplo de esto es el hecho de que te deja en el modo de inserción después del historial de búsqueda. Tengo que volver al modo de comando para golpear n para encontrar el siguiente elemento de búsqueda..vi-history-search-backward
. Lo escribiré y editaré mi respuesta. Vuelve hoy más tarde.bindkey | grep <searchterm>
para cualquiera de los términos, todos están prefijados porvi-
. ¿Necesito configurarbindkey
comandos que no tienen el prefijovi-
?Solo voy a abordar la pregunta (1).
Tu problema es KEYTIMEOUT. Cito de zshzle (1):
Ese 0.4s es el retraso que estás experimentando después de presionar ESC. La solución es establecer KEYTIMEOUT hasta 0.01s en uno de los archivos de inicio del shell:
Desafortunadamente, esto tiene un efecto en cadena: otras cosas comienzan a ir mal ...
En primer lugar, ahora hay un problema en el modo de comando vi: escribir ESC hace que el cursor se bloquee, y luego el carácter que escriba a continuación se traga. Esto se debe a que ESC no está vinculado a nada de forma predeterminada en el modo de comando vi, pero hay widgets de múltiples caracteres que comienzan con ESC (teclas de cursor). Así que cuando presionas ESC, ZLE espera al siguiente personaje ... y luego lo consume.
La solución es vincular ESC a alguna cosa en modo comando, asegurando así que la alguna cosa se pasa a ZLE después de $ KEYTIMEOUT centisegundos. Ahora podemos mantener los enlaces que comienzan con ESC en modo de comando sin estos efectos negativos. Asilo ESC al carácter de campana, que me parece incluso menos intrusivo que el autoinserto (y mi shell está silenciado):
Problema siguiente: hay, por defecto, algunos widgets de dos teclas que comienzan en ^ X en el modo de inserción vi; estos se vuelven inutilizables si $ KEYTIMEOUT se establece completamente. Lo que hago es desenlazar ^ X en el modo de inserción vi (se inserta automáticamente de forma predeterminada); Esto permite que los widgets de dos teclas sigan funcionando.
Pierde el enlace de autoinserción, pero puede enlazarlo a otra cosa, por supuesto. (No lo hago, ya que no tengo uso para ello).
El último problema (lo he encontrado hasta ahora): quedan algunas combinaciones de teclas predeterminadas que "perdemos" debido a que configuramos $ KEYTIMEOUT a la derecha, a saber: aquellos que comienzan con ESC en el modo de inserción vi, que son no teclas de cursor Yo personalmente los reviento para comenzar con ^ X en su lugar:
fuente