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
vim
jako swój EDITOR
/VISUAL
, aby podczas edytowania wiersza polecenia vim
używałeś go do edycji.
- Umieść
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
swój ~/.vimrc
plik 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
vim
edytorze 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 vi
in 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 random
jest 6-znakowym alfanumerycznym ciągiem losowym.
Daje to miejsce na wiele możliwości, jeśli używasz go vim
jako edytora, ponieważ możesz zdefiniować pewne mapowanie w .vimrc
celu 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 map
ping w swoim .vimrc
pliku
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
.