Często znajduję się w następującej pozycji: zacząłem pisać długie polecenie po znaku zachęty, ale w połowie dowiaduję się, że muszę sprawdzić coś za pomocą innego polecenia. Jest to problem, gdy jestem przy konsoli (bez X), co często się zdarza, ponieważ wtedy mam tylko następujące niezadowalające sposoby, o których wiem:
- Naciśnij ctrl+ alt+ F2i zaloguj się na kolejnej wirtualnej konsoli i dowiedz się, czego chciałem, a następnie wróć i kontynuuj
- ctrl+ a, wpisz echo + space+ enter, dowiedz się, co chciałem, naciskaj, ↑aż znajdę polecenie, ctrl+ a, delx 5, ctrl+ ei kontynuuj
- Podświetl to, co do tej pory wpisałem za pomocą myszy (jeśli działa gpm, co zwykle jest), naciśnij ctrl+, caby przerwać, dowiedz się, czego chciałem, uważając, aby nie używać myszy do wyróżnienia rzeczy, a następnie naciśnij środkowy przycisk myszy po nowej zachęcie i kontynuuj
- Módlcie się do bogów wiersza poleceń, aby na wpół napisane polecenie nie przyniosło żadnych negatywnych skutków, ale po prostu nie powiodło się, i ostrożnie naciśnij Enter, a następnie dowiedz się, czego chciałem, naciśnij w górę, aż odzyskam polecenie i kontynuuj
- Wskocz do mojej wehikułu czasu, cofnij się w czasie i przypomnij sobie, aby uruchomić ekran przed rozpoczęciem wpisywania polecenia, wróć do teraźniejszości, naciśnij ctrl+ a c, dowiedz się, czego chciałem, naciśnij ctrl+ a ctrl+ai kontynuuj
Chcę więc wiedzieć, czy jest jakiś bardziej elegancki sposób na zrobienie tego? Coś w rodzaju polecenia podpowłoki lub podobnego?
Najbardziej interesują mnie metody, które nie wymagają żadnych przygotowań ani konfiguracji do pracy.
źródło
zsh
to nie wyciąć całą linię, ale nabash
to kawałki do tyłu. Nigdy wcześniej nie zauważyłem tej różnicy^U
^K
będzie miał taki sam efekt jak,^A
^K
ale jest nieco bardziej ergonomiczny i znacznie wygodniejszy podscreen
.Wykonaj ctrl-A, aby dostać się do początku wiersza, przygotuj skrót i wciśnij Return - w ten sposób pozostanie on w historii poleceń jako komentarz i możesz wrócić do niego z kursorem w górę
EDYCJA: właśnie zauważyłem, że jest to nieco bardziej elegancki wariant na twoim # 2;)
źródło
csh
lubzsh
ponieważ nie pozwalają na komentarze w interaktywnej powłoce. Wzsh
trzeba włączyć odpowiednią opcję:setopt interactive_comments
.:
należy uważać za szkodliwe w tym celu i nigdy, nigdy nie będzie sugerowane. Wykona wszystko po średniku, wewnątrz backsku itp. Ze wszystkimi powiązanymi efektami ubocznymi.Naciśnij
Ctrl+A
,Ctrl+K
aby przejść na początek linii i usunąć (zabić) na jej końcu. Następnie przeprowadź badania, a gdy będziesz gotowy, aby kontynuować, uderzCtrl+Y
(szarpnij), aby przywrócić linię (zabitą).źródło
W zsh wpisuję Ctrl+, Zaby „zawiesić” polecenie, które wpisuję, i wpisuję inne polecenie. Po uruchomieniu tego polecenia (lub przerwaniu go za pomocą Ctrl+ C) zawieszone polecenie wraca do edycji (nawet zapamiętuje pozycję kursora). Jako dodatkową wygodę, jeśli wiersz polecenia jest pusty, gdy wpisuję Ctrl+ Z, klawisz wywołuje
bg
wbudowane (zamiast tego podwójne Ctrl+ Zwysyła uruchomione polecenie bezpośrednio w tło).Nie wiem jak zrobić coś podobnego w bashu.
W dowolnej powłoce możesz użyć mało zaawansowanej metody dodawania znaku
#
na początku bieżącej linii .źródło
zsh
ma ona już wbudowaną funkcję ? To się nazywapush-line
i wystarczy,bindkey
aby się do niego dostać.push-input
a niepush-line
tutaj,push-line
wydaje się bardziej odpowiednie (może tylko stare wersje zsh miałypush-input
?). Ale to nie zastępuje reszty funkcji.push-line
jest bezużyteczna na pustej linii,bg
włączenieCtrl+Z
jest użyteczne tylko wtedy, gdy właśnie zawiesiłem ten procesCtrl+Z
) i mnemoniczne (albo używam procesu w tle lub częściowy wiersz poleceń).push-input
zawiesza cały bufor wejściowy, podczas gdypush-line
zawiesza tylko bieżącą linię. Jeśli piszę polecenie wieloliniowe, chcę zawiesić całe polecenie, więcpush-input
jest to właściwe. Uważam, że jest topush-input
bardziej przydatne niżpush-line
(jeśli chcę opóźnić linię w wielowierszowym buforze wejściowym, mogę po prostu przejść do początku linii i wstawić nową linię), więc w rzeczywistości zastanawiam się, dlaczegopush-line
dostałem domyślne przypisanie klawiszy, a niepush-input
.W bash po prostu wpisz Alt+ #.
Następnie, gdy będziesz gotowy, naciśnij, Upa następnie Alt+ #.
Pierwszy umieszcza
#
na początku wiersza, aby zamienić go w komentarz, a następnie akceptuje wiersz, tak jakbyś nacisnął Enter.Następnie, gdy zrobisz to po raz drugi, zobaczy, że linia ma już
#
na początku znak , więc usuwa go i akceptuje, ponownie oszczędzając Enterklucz.Jeśli po raz drugi wstawisz inny
#
, musisz zamiast tego wpisać Alt+ - Alt+ #.Możesz sprawić, że zsh zrobi to samo, wstawiając
w twoim ~ / .zshrc.
Lub, jeśli używasz powiązań vi, możesz pisać #z trybu poleceń zarówno w bash, jak i zsh.
źródło
Esc+1
NastępnieAlt
+,#
aby przełączyć.Jedną z moich ulubionych funkcji
zsh
jest wbudowana funkcja push-line, która zajmuje się tym bez żadnego włamania w innych odpowiedziach tutaj. Mam związany z Ctrl+ lw moim.zshrc
pliku w następujący sposób:Następnie, gdy piszę jakieś polecenie i muszę zrobić coś naprawdę szybko, mogę je wywołać za pomocą jednego klawisza i wyświetlić pusty monit. Po uruchomieniu drugiego polecenia monit jest automatycznie wypełniany tym, co pisałem wcześniej.
Możesz nawet połączyć wiele warstw tego, a polecenia wrócą do ciebie w odwrotnej kolejności, aby wypchnąć je do kolejki.
źródło
Ctrl+Q
iESC q
(w trybie emacsa).push-line-or-edit
widżecie, który domyślnie nie jest powiązany z żadną mapą klawiszy. W wierszu najwyższego poziomu robi to samopush-line
, ale na każdym niższym poziomie wiersza przekształca całe wprowadzone polecenie w bufor wieloliniowy. Dwie świetne funkcje w jednym skrócie klawiszowym! Mogę polecić oprawapush-line-or-edit
zamiast zwykłegopush-line
. Nic nie tracisz i zyskujesz użyteczną funkcjonalność.Oprócz sztuczki ctrl- a ctrl- kjeśli jesteś na ekranie, po prostu ctrl- a daby odłączyć, a następnie ponownie podłącz
screen -r
Możesz także po prostu otworzyć kolejne okno za pomocą ctrl+a c
źródło
Ctrl+A c
.Alternatywny sposób, choć nie doskonały, naciśnij
Ctrl-X
Ctrl-E
. Spowoduje to otwarcie domyślnego edytora zawierającego polecenie wpisane do połowy. Następnie możesz zapisać polecenie w pliku lub otworzyć nową powłokę z poziomu edytora. Gdy wyjdziesz z nowej powłoki, powróci ona do edytora, a zapisanie zawartości spowoduje jej automatyczne wykonanie.Nie jest to idealne, ponieważ nie przywraca oryginalnej powłoki, ale albo wymusza wykonanie polecenia, albo całkowicie je odrzuca. Ale nie ma tymczasowych wyborów ani buforów zabijania, o które należy się martwić, a także kilka fajnych poprawek, np. If editor = vi
źródło
sudo update-alternatives --config editor
i wybierz swój ulubiony edytor. W przypadku innych systemów ustaw zmienne środowiskowe EDITOR lub VISUAL na ulubiony edytor, np. Dodajexport EDITOR=/usr/bin/nano
.bashrc.Podobnie do metody dodawania
#
na początku wiersza, istnieje prawdopodobnie łatwiejsza metoda, której używam, która nie wymaga powrotu na początek wiersza:Po prostu dodaj otwartą wycenę i nie zamykaj jej, ani pojedynczej, ani podwójnej.
Następnie naciśnij Enter.
Następnie naciśnij CtrlC.
Polecenie częściowe jest zapisywane w historii poleceń (dostępne za pomocą strzałki w górę), ale w rzeczywistości nie jest wykonywane.
źródło
Używając zsh, jeśli wpiszesz
<ESC> q
(klawisz Escape, a następnie Q), wiersz polecenia zostanie wycięty, aby można było wpisać inne polecenie. Automatycznie otrzymasz wycięty tekst w następnym monicie.Może zapamiętać kilka linii jednocześnie, więc możesz z niego korzystać, gdy linia czeka na Ciebie. Możesz nawet użyć go na pustej linii, aby opóźnić wznowienie linii cięcia.
To nie jest najbardziej efektywny sposób, jeśli musisz użyć kilku poleceń do sprawdzenia / przygotowania (będziesz musiał ponownie wpisać
<ESC> q
przed każdym poleceniem). Ale myślę, że można powiązać go z krótszym skrótem.Jeśli chcesz tylko sprawdzić instrukcję, wpisz
<ESC> h
(klawisz Escape, a następnie H). To uruchomirun-help
wbudowane, z pierwszym słowem wiersza poleceń jako argumentem. Po zakończeniu znajdziesz nienaruszoną linię.źródło
M-q
zamiast tego<ESC> q