Najnowsza aktualizacja mojego doświadczenia
Część 0"+y$dd poniższego mapowania jest naprawdę czymś, o czym powinieneś dokładnie pomyśleć i dostosować ją do swojego gustu / przepływu pracy / doświadczenia.
Na przykład bardzo często zdarza mi się, że kończę z wieloma liniami w buforze, gdzie chcę tylko wykonać ten, na którym znajduje się kursor; w tym przypadku mogę użyć0"+y$dd:%d<CR> zamiast 0"+y$dd.
A to tylko jeden z możliwych scenariuszy.
Ostateczna odpowiedź dla tych, którzy lubią vim
- Ustaw
vimjako swój EDITOR/VISUAL , aby podczas edytowania wiersza polecenia vimużywałeś go do edycji.
- Umieść
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>swój ~/.vimrcplik do zamapowania Leaderd(którego rzadko będziesz używać podczas edycji polecenia) na akcję „usuń bieżącą linię do+ rejestru bez końcowego EOL”.
- Po zakończeniu edycji polecenia w
vimedytorze naciśnijEscapeLeaderd .
- Wklej schowek do terminala (zależy to od terminala).
Oryginalna odpowiedź
Często muszę zrobić to samo i robię to w następujący sposób. (Zwykle używam set -o viin bash, więc punkty 1 i 2 poniżej są różne, jeśli używasz set -o emacs, domyślnie; na podstawie twojego pytania wygląda na to, że punkty 1 i 2 są ujednolicone w Ctrl+, xa następnie Ctrl+ e, co jest trudniejsze do wpisania, imho .)
- trafienie Escape w tryb normalny,
- trafienie v aby wejść do edytora w celu edycji polecenia,
- edytuj polecenie tak jak lubię,
(To tutaj zadajesz pytanie.)
- trafienie Escape0"+y$dd:wq ,
- Uwaga: 0"+y$nie tylko "+yydlatego, że ten ostatni skopiowałby również nowy wiersz, a to spowodowałoby wykonanie polecenia po wklejeniu go w wierszu polecenia,
- wklej schowek w linii poleceń
- jak to zrobić, zależy od terminalu, którego używasz, tak myślę; Nacisnąłem Ctrl+ Alt+ vw
URxvt.
- przejdź do zatwierdzenia / edycji ręcznej.
Oczywiście jest to tylko obejście polegające na skopiowaniu edytowanego polecenia do schowka przed usunięciem całego polecenia, dzięki czemu nic nie zostanie wykonane po wyjściu z edytora; jednak jest to najlepsze, co mogę dla siebie zdobyć.
Aktualizacja
Ponieważ moje EDITOR(i VISUAL) jest równe vim, kiedy edytuję polecenie, edytuję je w vim.
W związku z tym zauważyłem, że bufor ma nazwę /tmp/bash-fc.random, gdzie randomjest 6-znakowym alfanumerycznym ciągiem losowym.
Daje to miejsce na wiele możliwości, jeśli używasz go vimjako edytora, ponieważ możesz zdefiniować pewne mapowanie w .vimrccelu wykonania całej sekwencji Escape0"+y$dd:wq. Na przykład jednym poleceniem, którego rzadko używasz podczas edycji wiersza poleceń, jest Leaderd; dlatego możesz umieścić następujący mapping w swoim .vimrcpliku
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
tak więc krok 4 w powyższym przepisie staje się
- trafienie EscapeLeaderd
edit-and-execute-command.