Última actualización sobre mi experiencia
La parte 0"+y$dd
en el siguiente mapeo es realmente algo en lo que debe pensar cuidadosamente y adaptarlo a su gusto / flujo de trabajo / experiencia.
Por ejemplo, con mucha frecuencia me encuentro terminando con varias líneas en el búfer, donde solo quiero ejecutar aquella en la que está el cursor; en este caso puedo usar en 0"+y$dd:%d<CR>
lugar de 0"+y$dd
.
Y este es solo uno de los escenarios posibles.
Respuesta final para quienes gustan vim
- Establezca
vim
como su EDITOR
/ VISUAL
, de modo que cuando vim
edite una línea de comando, la use para editarla.
- Coloque
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
su ~/.vimrc
archivo en el mapa Leaderd(que rara vez usará al editar un comando) en la acción "eliminar la línea actual en el +
registro sin la EOL final".
- Cuando termine de editar un comando en el
vim
editor, presione EscapeLeaderd.
- Pegue el portapapeles en el terminal (esto depende del terminal).
Respuesta original
A menudo necesito hacer lo mismo, y lo hago de la siguiente manera. (Normalmente uso el set -o vi
in bash
, por lo que los puntos 1 y 2 a continuación son diferentes si usa set -o emacs
el valor predeterminado; según su pregunta, parece que los puntos 1 y 2 están unificados en Ctrl+ xseguido de Ctrl+ e, que es más difícil de escribir, en mi humilde opinión .)
- presione Escapepara estar en modo normal,
- presione vpara ingresar al editor para editar el comando,
- edito el comando como me gusta,
(Aquí es donde haces la pregunta).
- golpeado Escape0"+y$dd:wq,
- Nota: 0"+y$no simplemente "+yy, ya que este último también copiaría la nueva línea, y esto resultaría en ejecutar el comando al pegarlo en la línea de comando,
- pegue el portapapeles en la línea de comando
- cómo hacerlo depende del terminal que estés usando, supongo; Golpeé Ctrl+ Alt+ ven
URxvt
.
- proceder a la aprobación / edición manual.
Claramente, esto es solo una solución, que consiste en copiar el comando editado en el portapapeles antes de eliminar todo el comando, para que nada se ejecute al salir del editor; Sin embargo, es lo mejor que puedo obtener por mí mismo.
Actualizar
Como mi EDITOR
(y VISUAL
) es igual a vim
, cuando edito el comando, lo edito en vim
.
A este respecto, he notado que el búfer se llama /tmp/bash-fc.random
, donde random
hay una cadena aleatoria alfanumérica de 6 caracteres.
Esto le da espacio a muchas posibilidades, si las usa vim
como su editor, ya que puede definir algún mapeo en su .vimrc
para ejecutar toda la secuencia Escape0"+y$dd:wq. Por ejemplo, un comando que rara vez usaría al editar una línea de comando es Leaderd; por lo tanto, puede poner el siguiente map
ping en su .vimrc
archivo
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
para que el paso 4 de la receta anterior se convierta
- golpear EscapeLeaderd
edit-and-execute-command
.