Última atualização em minha experiência
A parte 0"+y$dd
do mapeamento a seguir é realmente algo em que você deve pensar cuidadosamente e adaptá-lo ao seu gosto / fluxo de trabalho / experiência.
Por exemplo, com muita frequência me vi terminando com várias linhas no buffer, onde só quero executar a linha em que o cursor está; neste caso, eu posso usar em 0"+y$dd:%d<CR>
vez de 0"+y$dd
.
E este é apenas um dos cenários possíveis.
Resposta final para quem gosta vim
- Defina
vim
como seu EDITOR
/ VISUAL
, para que, ao editar uma linha de comando, você a utilize vim
para editá-la.
- Coloque
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
seu ~/.vimrc
arquivo no mapa Leaderd(que você raramente usará ao editar um comando) para a ação "exclua a linha atual no +
registro sem a EOL à direita".
- Quando terminar de editar um comando no
vim
editor, pressione EscapeLeaderd.
- Cole a área de transferência no terminal (isso depende do terminal).
Resposta original
Costumo fazer o mesmo e faço o seguinte. (Normalmente eu uso o set -o vi
in bash
, então os pontos 1 e 2 a seguir são diferentes se você usar set -o emacs
o padrão; com base na sua pergunta, parece que os pontos 1 e 2 estão unificados em Ctrl+ xseguido por Ctrl+ e, que é mais difícil de digitar, imho .)
- clique Escapepara estar no modo normal,
- pressione vpara entrar no editor para editar o comando,
- edite o comando como eu quiser,
(É aqui que você faz a pergunta.)
- bater Escape0"+y$dd:wq,
- Nota: 0"+y$não apenas "+yyporque a última copia a nova linha também, e isso resultaria na execução do comando ao colá-lo na linha de comando,
- cole a área de transferência na linha de comando
- como fazer isso depende do terminal que você está usando, eu acho; Eu apertei Ctrl+ Alt+ vdentro
URxvt
.
- prossiga para aprovação / edição manual.
Claramente, isso é apenas uma solução alternativa, consistindo em copiar o comando editado na área de transferência antes de excluir o comando inteiro, para que nada seja executado ao sair do editor; no entanto, é o melhor que posso obter para mim.
Atualizar
Como meu EDITOR
(e VISUAL
) é igual a vim
, quando edito o comando, edito-o em vim
.
A esse respeito, notei que o buffer é nomeado /tmp/bash-fc.random
, onde random
é uma sequência aleatória alfanumérica de 6 caracteres.
Isso abre espaço para muitas possibilidades, se você usar vim
como seu editor, pois poderá definir alguns mapeamentos .vimrc
para executar a sequência inteira Escape0"+y$dd:wq. Por exemplo, um comando que você raramente usaria ao editar uma linha de comando é Leaderd; portanto, você pode colocar o seguinte map
ping no seu .vimrc
arquivo
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
para que o passo 4 da receita acima se torne
- acertar EscapeLeaderd
edit-and-execute-command
.