Ultimo aggiornamento sulla mia esperienza
La parte 0"+y$ddnella seguente mappatura è davvero qualcosa a cui dovresti pensare attentamente e adattarlo al tuo gusto / flusso di lavoro / esperienza.
Ad esempio, molto spesso mi sono ritrovato a finire con più righe nel buffer, dove voglio solo eseguire quello su cui si trova il cursore; in questo caso posso usare0"+y$dd:%d<CR> invece di 0"+y$dd.
E questo è solo uno dei possibili scenari.
Risposta finale per chi piace vim
- Imposta
vimcome EDITOR/ VISUAL, in modo che quando modifichi una riga di comando, utilizzeraivim per modificarlo.
- Inserisci il
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>tuo ~/.vimrcfile per mappare Leaderd(che userai raramente durante la modifica di un comando) all'azione "elimina la riga corrente nel +registro senza l'EOL finale".
- Al termine della modifica di un comando
vimnell'editor, premi EscapeLeaderd.
- Incollare gli Appunti nel terminale (dipende dal terminale).
Risposta originale
Ho spesso bisogno di fare lo stesso e lo faccio come segue. (Di solito uso set -o viin bash, quindi i punti 1 e 2 seguenti sono diversi se si utilizza set -o emacs, l'impostazione predefinita; in base alla domanda sembra che i punti 1 e 2 siano unificati in Ctrl+ xseguito da Ctrl+ e, che è più difficile da digitare, imho .)
- colpito Escapeper essere in modalità normale,
- colpire v per accedere all'editor per modificare il comando,
- modifica il comando come mi piace,
(Qui è dove fai la domanda.)
- colpire Escape0"+y$dd:wq,
- Nota: 0"+y$non semplicemente "+yy, poiché quest'ultimo copierebbe anche la nuova riga e ciò comporterebbe l'esecuzione del comando dopo averlo incollato nella riga di comando,
- incolla gli appunti sulla riga di comando
- come farlo dipende dal terminale che stai usando, immagino; Ho premuto Ctrl+ Alt+ vin
URxvt.
- passare all'approvazione / modifica manuale.
Chiaramente questa è solo una soluzione alternativa, consistente nel copiare il comando modificato negli appunti prima di cancellare l'intero comando, in modo che nulla venga eseguito all'uscita dall'editor; tuttavia è il meglio che posso ottenere per me stesso.
Aggiornare
Poiché il mio EDITOR(e VISUAL) è uguale a vim, quando modifico il comando, lo modifico invim .
A questo proposito, ho notato che il buffer è chiamato /tmp/bash-fc.random, dove randomè una stringa casuale alfanumerica di 6 caratteri.
Questo dà spazio a molte possibilità, se si utilizza vimcome editor, in quanto è possibile definire alcune mappature nel proprio .vimrcper eseguire l'intera sequenza Escape0"+y$dd:wq. Ad esempio, un comando che useresti raramente durante la modifica di una riga di comando è Leaderd; quindi puoi inserire il seguente mapping nel tuo .vimrcfile
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
in modo che il passaggio 4 nella ricetta precedente diventi
- colpire EscapeLeaderd
edit-and-execute-command.