Comment éditer une ligne de commande dans l'éditeur plein écran dans ZSH?

52

En bash, en mode vi, si je frappe Esc, vma ligne de commande actuelle est ouverte dans l'éditeur spécifié par $EDITORet je peux l'éditer en plein écran avant de «sauvegarder» la commande à retourner au shell et à l'exécuter.

Comment puis-je obtenir un comportement similaire dans zsh? Frapper ven mode commande donne une sonnerie et n'a aucun effet apparent, malgré le EDITORparamétrage de la variable d'environnement.

Murali Suriar
la source

Réponses:

36

Voir edit-command-linedans zshcontrib.

bindkey -M vicmd v edit-command-line
éphémère
la source
13
(Juste pour clarifier): Pour activer le edit-command-line"widget", vous aurez besoin de quelque chose comme autoload edit-command-line; zle -N edit-command-linedans l'un de vos fichiers init zsh (voir la section Fonctions ZLE de la zshcontribdocumentation ).
Chris Johnsen
Comment pouvez-vous l'activer une fois qu'il est en place? Le bindkey dans la réponse de type emacs a du sens pour moi. Mais je ne peux pas trouver de référence sur ce qui bindkey -M vicmd vétablit.
Mat Schaffer
1
@MatSchaffer Identique à Bash: si vous êtes en mode vi, appuyez sur <ESC>pour passer en mode commande à partir du mode insertion, puis ven mode visuel ( Meta-videntique), ou simplement vsi vous êtes déjà en mode commande. Si vous utilisez le mode Emacs, la liaison typique est C-x C-e.
éphémère
1
Remapper la touche v signifie que vous ne pouvez plus utiliser le mode visuel. Je préfère donc remapper à la barre d'espace (ce qui ne fait rien d'utile en mode normal) avecbindkey -M vicmd ' ' edit-command-line
gib
37

Si vous préférez les raccourcis clavier Emacs:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Daniel Serodio
la source
9
La ^x^eliaison semble être un défaut avec le fichier .oh-my-zsh actuel , ce qui est extrêmement agréable.
quodlibetor
^ x ^ e est exactement ce que je cherchais.
Jmreicha
1
Configuration similaire pour Prezto tant que le editormodule est chargé.
AL le X
23

Vous pouvez utiliser fcpour éditer la dernière commande de l'historique. Ce n'est pas la même chose que d'éditer la même commande, mais un appui rapide sur la touche Entrée transforme votre commande actuelle en dernière commande de l'historique.

Christoph Wurm
la source
15

Voici la configuration complète que j'ai ajoutée à mon ~/.zshrcpour obtenir le même comportement de bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Matt Hughes
la source
Selon les commentaires précédents, ceci est configuré par défaut si vous utilisez Oh my ZSH ou Prezto . Ce dernier nécessite que le editormodule soit chargé et / viou vimsélectionné pour le mode commande.
AL le X
Je voterais pour en faire la réponse acceptée, cela a résolu ma question avec toutes les configurations décrites. Merci.
Laurent