Usuwanie danych wejściowych z powrotem do ostatniego ukośnika

16

Bardzo często będę flirtował między kilkoma plikami na serwerze. Uruchomię następujące przykładowe polecenia po kolei:

nano /web/site/path/to/file
/web/site/script.py
nano /web/site/path/to/anotherFile
nano /web/site/path/to/yetAnotherFile
/web/site/script.py
nano /web/site/path/to/etc

Aby przejść z jednego nanopolecenia do drugiego, aktualnie naciskam Upi Backspacezastępuję ostatni segment ścieżki. Problem w tym, że jestem naprawdę, bardzo leniwy.

Czy istnieje skrót klawiaturowy (lub Bashism), który może:

  • Zastąp ostatnią użytą ścieżką (z dodatkowym bitem na końcu)
  • Usuń w bieżącym wierszu (np. Po naciśnięciu Up) z powrotem do ostatniego/
Oli
źródło
1
Nie jestem pewien, co dokładnie masz na myśli, ale myślę, że w pierwszej części możesz użyć alt+ .?
Sparhawk,
@Sparhawk Alt + .służy do czegoś innego .
Radu Rădeanu
@ RaduRădeanu Tak, może źle zrozumiałem pytanie. Pomyślałem: „Zastąp ostatnią użytą ścieżką (z dodatkowym bitem na końcu)” znaczy, co robi alt+ ..
Sparhawk
@Sparhawk Znowu jeden z tych skrótów, który jest naprawdę przydatny raz w miesiącu, ale wydaje mi się, że nie jestem w stanie zapisać się w pamięci. W połączeniu z alt-backspace jest bardzo przydatny do uruchamiania podobnych plików za pomocą różnych poleceń.
Oli
@Oli Zwykle używam go trochę, ale zawsze zapominam, jak przejść w drugą stronę !
Sparhawk

Odpowiedzi:

21

Myślę, że szukasz skrótu Alt+ Backspace.

Po naciśnięciu Upnależy usunąć z powrotem do poprzedniego /lub spaceznaku.

Sylvain Pineau
źródło
7
TERAZ JESTEŚMY NIE do zatrzymania! (Edytuj: Przysięgam, że uczę się i zapomniałem tego skrótu co najmniej dziesięć razy w roku)
Oli
3
Co to powinno zrobić? Na moim terminalu wydaje się, że nie robi nic innego niż zwykły backspace.
Bakuriu
1
@Bakuriu Ten skrót powinien być domyślny. Jeśli chcesz dowiedzieć się, na co jest odwzorowany w twoim systemiebind -P | grep '^backward-kill-word'
Sylvain Pineau,
1
@ Bakuriu To samo tutaj, jestem na komputerze Mac.
laike9m
9

Aby wykryć powiązanie readline, które zabija słowo do tyłu, jak chcesz, możesz użyć następującego polecenia w terminalu:

bind -p | awk '/kill/ && /word/ && /backward/'

W domyślnej instalacji Ubuntu dane wyjściowe mogą być:

"\e\C-h": backward-kill-word
# shell-backward-kill-word (not bound)

Druga linia wydaje się w tym momencie bez znaczenia, więc spróbujmy zobaczyć, co oznacza pierwsza linia. Z tego co rozumiem, backward-kill-wordfunkcji readline, który w rzeczywistości usunąć wszystkie znaki aż poprzedni znak specjalny ( /, ;, ,itd) jest związany z \e\C-hsekwencji klawiszy. Teraz, w tej kolejności \e przedstawia się Escklucz, \C- na Ctrlklucz, a \C-hstoi za Ctrl+ h, który jest równoważny w tym przypadku z Backspacekluczem.

Szukamy więc skrótu klawiaturowego Esc+ Ctrl+,h który jest równoważny z Esc+Backspace i który z powodu zachowania xterm sprawia, że Altklucz działa jako znak meta, a znaki meta są konwertowane na sekwencję dwóch znaków, a sam znak poprzedza Esc(patrz man xterm) , jest równoważne z Alt+Backspace .

Teraz, jeśli ci się nie podoba i nadal go zapominasz, możesz użyć następującego polecenia, aby utworzyć nowy skrót, powiedzmy Esc+ w, do swojego celu:

bind '"\ew": backward-kill-word'

Aby ten nowy skrót był stały przez cały czas dla wszystkich poleceń korzystających z readline, dodaj do ~/.inputrcpliku następującą linię :

"\ew": backward-kill-word

Zobacz help -m bind | sensible-pagerwięcej informacji.

Radu Rădeanu
źródło
2
Dobra odpowiedź. Częściej obejmujesz całe ustawienie pojedynczymi cudzysłowami za pomocą polecenia bind; bind '"\ew": backward-kill-word', ale to podstępne. A może warto wspomnieć, że można również umieścić "\ew": backward-kill-wordw ~/.inputrc, w którym to przypadku innych poleceń, że użycie readline będzie również, że wiązanie, na przykład jeśli włączysz readline w python interaktywnej powłoki, że wiązanie stosuje się również tam.
geirha
@geirha Tak, wiem, co powiedziałeś, ale pomyślałem, że PO wie, jak sobie z tym poradzić. W każdym razie, teraz zdaję sobie sprawę, że moja odpowiedź nie jest tak przydatna dla OP (chciał tylko zapamiętać skrót), ale mam nadzieję, że będę przydatna dla innych użytkowników tej witryny i do tego zedytowałem swoją odpowiedź, dodając twoją obserwację. Dziękuję Ci.
Radu Rădeanu
0

Inną kluczową kombinacją jest:

Alt+ Bnastępnie Ctrl+K

Alt + B     Move cursor backward one word on the current line    
Ctrl + K    Clear the line after the cursor

Alt+ Bnastępnie Alt+D

To usuwa ostatnie słowo bez usuwania specjalnego znaku między słowami.

αғsнιη
źródło