Dernière mise à jour sur mon expérience
La partie 0"+y$dd
de la cartographie suivante est vraiment quelque chose à laquelle vous devriez réfléchir attentivement et l'adapter à vos goûts / flux de travail / expérience.
Par exemple, très souvent, je me suis retrouvé avec plusieurs lignes dans le tampon, où je veux seulement exécuter celle sur laquelle se trouve le curseur; dans ce cas, je peux utiliser à la 0"+y$dd:%d<CR>
place de 0"+y$dd
.
Et ce n'est là qu'un des scénarios possibles.
Réponse finale pour ceux qui aiment vim
- Définissez
vim
comme votre EDITOR
/ VISUAL
, afin que lors de la modification d'une ligne de commande, vous l'utilisiez vim
pour la modifier.
- Mettez
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
votre ~/.vimrc
fichier à mapper Leaderd(que vous utiliserez rarement lors de l'édition d'une commande) à l'action "supprimer la ligne courante dans le +
registre sans la fin EOL".
- Lorsque vous avez terminé de modifier une commande dans l'
vim
éditeur, appuyez sur EscapeLeaderd.
- Collez le presse-papiers dans le terminal (cela dépend du terminal).
Réponse originale
J'ai souvent besoin de faire de même et je le fais comme suit. (J'utilise normalement le set -o vi
in bash
, donc les points 1 et 2 suivants sont différents si vous utilisez set -o emacs
, la valeur par défaut; sur la base de votre question, il semble que les points 1 et 2 sont unifiés en Ctrl+ xsuivi de Ctrl+ e, ce qui est plus difficile à taper, à mon humble avis .)
- frapper Escapepour être en mode normal,
- appuyez sur vpour entrer dans l'éditeur pour modifier la commande,
- éditez la commande comme je veux,
(C'est ici que vous posez la question.)
- frapper Escape0"+y$dd:wq,
- Remarque: 0"+y$pas simplement "+yy, car ce dernier copierait également la nouvelle ligne, ce qui entraînerait l'exécution de la commande lors du collage dans la ligne de commande,
- collez le presse-papiers sur la ligne de commande
- la façon de procéder dépend du terminal que vous utilisez, je suppose; Je frappe Ctrl+ Alt+ vdans
URxvt
.
- procéder à l'approbation / modification manuelle.
Il s'agit clairement d'une solution de contournement, consistant à copier la commande modifiée dans le presse-papiers avant de supprimer la commande entière, afin que rien ne soit exécuté à la sortie de l'éditeur; mais c'est le mieux que je puisse me procurer.
Mise à jour
Comme mon EDITOR
(et VISUAL
) est égal à vim
, lorsque je modifie la commande, je la modifie dans vim
.
À cet égard, j'ai remarqué que le tampon est nommé /tmp/bash-fc.random
, où se random
trouve une chaîne aléatoire alphanumérique à 6 caractères.
Cela donne de l'espace à de nombreuses possibilités, si vous l'utilisez vim
comme éditeur, car vous pouvez définir un mappage dans votre .vimrc
pour exécuter la séquence entière Escape0"+y$dd:wq. Par exemple, une commande que vous utiliseriez rarement lors de la modification d'une ligne de commande est Leaderd; vous pouvez donc mettre le map
ping suivant dans votre .vimrc
fichier
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
de sorte que l'étape 4 de la recette ci-dessus devienne
- frappé EscapeLeaderd
edit-and-execute-command
.