Yo uso bindkey -v
(para bash-ers set -o vi
, creo que también funciona en zsh) o el modo vi (m). pero me molesta que no tenga ninguna señal visual para decirme si estoy en modo de inserción o en modo de comando. ¿Alguien sabe cómo puedo hacer que mi mensaje muestre el modo?
44
CTRL+C
mientras está en modo vi-command, la solicitud se reiniciará, pero indicará que está en modo comando cuando realmente esté en modo insert.zle-line-init
siempre debe cambiar el indicador al modo de inserción. Por alguna razón,$KEYMAP
no se actualiza correctamente cuando se llama a zle-line-init.zle reset-prompt
borrará 1 (o más) líneas sobre el mensaje (si su mensaje es multilínea) al volver a dibujar :( Esto es un espectáculo para mí.Ya has encontrado
zle-keymap-select
cuál se ejecuta cada vez que cambia el modo. Puede usarlo para configurar algún otro indicador visual que no sea el indicador, según lo que su terminal lo admita (y su gusto en la pantalla del indicador de modo, por supuesto).Hay una capacidad estándar de terminfo para cambiar la forma del cursor. Sin embargo, algunos terminales muestran el mismo cursor en ambos modos. La noción de Xterm de un cursor menos visible es hacer que parpadee (y esto debe habilitarse con el
-bc
argumento ocursorBlink
recurso de la línea de comando ).Con algunos terminales, también puede cambiar el color del cursor con
print -n '\e]12;pink\a'
(por nombre de color) oprint -n '\e]12;#abcdef\a'
(por especificación RGB). Estas secuencias se describen en la documentación de xterm, en elctlseqs
archivo; Los emuladores de terminal modernos suelen emular xterm, aunque es posible que no admitan todas sus características.fuente
main
enKEYMAP
lugar deviins
no entiendo , no estoy seguro de por qué.main
es un alias paraviins
oemacs
dependiendo de si zsh pensó que su editor favorito era vi o no cuando comenzó. Pensé que lo usaríaviins
cuando volviera a cambiar el modovicmd
, pero parece que lo usa en sumain
lugar. Actualizado.zle-line-init
(o cualquier otra alternativa) yazle-keymap-select
que no se le llama si presionar enter cambia el mapa de teclas.Para las personas que tienen problemas al usar reset-prompt con mensajes multilínea, esto funcionó para mí: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html En combinación con https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Terminé haciendo:
fuente
puedes probar VimMode
fuente
Esto es lo que uso para cambiar el cursor entre la forma 'Bloque' y 'Viga' en zsh:
(Probado con Termite , gnome-terminal y mate-terminal )
fuente
add-zsh-hook
así: gist.github.com/MatrixManAtYrService/…Otra solución para cambiar la forma del cursor entre I-beam y block (para subrayado, uso
\033[4 q
). Agrega esto a tu~/.zshrc
.Modificado de https://bbs.archlinux.org/viewtopic.php?id=95078 . Probado en gnome-terminal 3.22.
Actualizar
Aquí se puede encontrar otra solución para cambiar las formas del cursor . Aparentemente, este funciona para iTerm2, que no tengo los medios para probar, pero lo agrego aquí en caso de que sea útil para otra persona. La adición final a tu
~/.zshrc
seríafuente
Actualmente estoy usando Zsh con el tema Bullet Train . Siguiendo el ejemplo dado por la respuesta de Sebastian Blask , terminé con el siguiente código
Esto solo cambiará $ por defecto a las letras N al modo normal e I al modo de inserción.
Esta imagen es un ejemplo cuando en modo normal presiono Ctrl+ C:
fuente
Aquí hay otra versión, basada en la publicación de Sebastian Blask . Se pretendía que fuera lo menos intrusivo posible, ya que todas las otras soluciones que pude encontrar utilizaron líneas adicionales, estado a la derecha o caracteres agregados.
Esto simplemente cambia el color de
$
blanco a rojo cuando el modo normal está habilitado. Edite el aviso a su gustofuente
Una versión para
oh-my-zsh
usuariosHay un complemento para
oh-my-zsh
llamadovi-mode
que se puede encontrar aquí:robbyrussell / oh-my-zsh / plugins / vi-mode
Utilizo Antigen para administrar mis complementos, por lo que incluirlo fue tan simple como agregar esto a mi
.zshrc
:fuente
El complemento zsh-vim-mode puede mostrar un indicador para los modos de inserción, comando, búsqueda, reemplazo y visual. Utiliza la técnica básica de otras respuestas para conectarse a los diversos enlaces ZLE (zle-keymap-select, zle-isearch-update, etc.). Comprueba el
[[ $ZLE_STATE = *overwrite* ]]
modo de reemplazo. Comprueba$REGION_ACTIVE
para identificar el modo visual.La lógica se complica por algunas peculiaridades de cómo ZSH dispara eventos al salir del modo de búsqueda.
Otra buena característica del módulo es la capacidad de cambiar la forma y el color del cursor según el modo. Por ejemplo, puede usar una barra vertical en modo INSERTAR y un subrayado parpadeante en modo BÚSQUEDA.
fuente