¿Cómo editar la línea de comandos en el editor de pantalla completa en ZSH?

52

En bash, usando el modo vi, si presiono Esc, vmi línea de comando actual se abre en el editor especificado por $EDITORy puedo editarla en pantalla completa antes de 'guardar' el comando que se devolverá al shell y se ejecutará.

¿Cómo puedo lograr un comportamiento similar en zsh? Golpear ven el modo de comando resulta en una campana y no tiene ningún efecto aparente, a pesar de que EDITORse establezca la variable de entorno.

Murali Suriar
fuente

Respuestas:

36

Ver edit-command-lineen zshcontrib.

bindkey -M vicmd v edit-command-line
efímero
fuente
13
(Solo para aclarar): para habilitar el edit-command-line"widget", necesitará algo como autoload edit-command-line; zle -N edit-command-lineen uno de sus archivos zsh init (consulte la sección Funciones ZLE de la zshcontribdocumentación ).
Chris Johnsen el
¿Cómo se activa esto una vez que está en su lugar? El bindkey en la respuesta de estilo emacs tiene sentido para mí. Pero no puedo encontrar referencias sobre lo que bindkey -M vicmd vse configura.
Mat Schaffer
1
@MatSchaffer Igual que Bash: si está en modo vi, presione <ESC>para ingresar al modo de comando desde el modo de inserción y luego val modo visual ( Meta-ves el mismo), o simplemente vsi ya está en modo de comando. Si está utilizando el modo Emacs, el enlace típico es C-x C-e.
Ephemient
1
Reasignar la tecla v significa que ya no puede usar el modo visual, por lo que prefiero reasignar a la barra espaciadora (que no hace nada útil en modo normal) conbindkey -M vicmd ' ' edit-command-line
gib
37

En caso de que prefiera las combinaciones de teclas de Emacs:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Daniel Serodio
fuente
99
El ^x^eenlace parece ser un valor predeterminado con .oh-my-zsh actual , que es extremadamente agradable.
quodlibetor
^ x ^ e es exactamente lo que estaba buscando.
jmreicha
1
Configuración similar para Prezto siempre que editorse cargue el módulo.
AL the X
23

Puede usar fcpara editar el último comando en el historial. No es lo mismo que editar el mismo comando, pero un golpe rápido en la tecla Intro hace que su comando actual sea el último comando en la historia.

Christoph Wurm
fuente
15

Esta es la configuración completa que agregué a mi ~/.zshrcpara obtener el mismo comportamiento de bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Matt Hughes
fuente
Según los comentarios anteriores, esto se configura de manera predeterminada si está utilizando Oh my ZSH o Prezto . Este último requiere que el editormódulo se cargue vio se vimseleccione para el modo de comando.
AL X X
Yo votaría para que esta sea la respuesta aceptada, resolvió mi pregunta con toda la configuración descrita. Gracias.
Laurent