Jak usunąć część ścieżki w interaktywnej powłoce?

19

Czy istnieje skrót w bash i zsh, aby usunąć jeden ze składników ścieżki? Na przykład, jeśli piszę ls ~/local/color/, a kursor znajduje się na końcu wiersza, czy istnieje skrót do usunięcia znaku color/na końcu? Idealnie chcę rozwiązania zarówno w trybie vi, jak i emacs

Vayn
źródło

Odpowiedzi:

25

Najczęściej używane polecenia w domyślnym trybie emulacji bash , dla najczęściej używanych klawiatur:

Ruch

  • Ctrl- plub Up: poprzednie polecenie
  • Ctrl- nlub Down: następne polecenie
  • Ctrl- blub Left: poprzedni znak
  • Ctrl- flub Right: następny znak
  • Alt- b: poprzednie słowo
  • Alt- f: następne słowo
  • Ctrl- alub Home: początek polecenia
  • Ctrl- elub End: koniec polecenia

Redagowanie

  • BkSpc: usuń poprzedni znak
  • Ctrl- dlub Del: usuń bieżący znak
  • Alt- BkSpc: usuń słowo z lewej
  • Alt- d: usuń słowo z prawej
  • Ctrl- u: usuń, aby rozpocząć polecenie
  • Ctrl- k: usuń do końca polecenia
  • Ctrl- y: wklej ostatnie cięcie

Miscellanea

  • Cltr- /: cofnij
  • Cltr- r: przyrostowe wyszukiwanie historii wstecz
enzotib
źródło
2
Uzupełnienie: ustaw w tym celu skrót w bindkey [key] vi-backward-kill-word
Zsh
Dzięki. Dodałem to do mojego pliku ~ / .zshrc i działa dobrze dla mnie po naciśnięciu Alt + Backspace: bindkey "^ [^?" vi-backward-kill-word. To nie jest idealne.
Tim Stewart,
Alt-Bckspc i Alt-d działają dobrze z ścieżkami plików, na których je wypróbowałem. (bash)
skromny
10

Jest też unix-filename-ruboutdla Readline!

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout
mikeo
źródło
2
IMHO unix-filename-ruboutjest poprawną odpowiedzią na zadane pytanie, ponieważ usuwa ukośnik lub spację, a Alt-BkSpczatrzymuje się na znakach takich jak łącznik, podkreślnik, kropka itp.
Steve
6

Domyślnie bash (i zgaduję, że zsh) będzie w trybie emacsa. Możesz spróbować czegoś takiego:

Esc + bcofnie kursor o jedno słowo. Ctrl + kusunie się do końca linii.

Większość nowoczesnych powłok (takich jak bash) będzie implementować zaawansowane funkcje edycji wiersza poleceń. Te polecenia są albo bliskie edycji emacsa (Ctrl + A dla początku linii, Ctrl + E dla końca linii, ...).

Jeśli znasz edytory podobne do vi, możesz spróbować włączyć tryb vi.

set -o vi

Daje to powłoki podobne do vi (tryb poleceń / tryb wstawiania), a ty masz dostęp do standardowych poleceń (d dla usuwania, r dla zamiany, ...)

W trybie Vi możesz zrobić to, co opisałeś:

Esc (command mode); d; b.
rahmu
źródło
1
Nie powiedziałbym, że „edycja wiersza poleceń jest jeszcze bardziej wydajna i kompletna w trybie vi”, tryb emacs ma polecenia do robienia wszystkiego, co możesz zrobić w trybie vi .
enzotib
Przyznaję, że mnie trochę poniosło. Przeredaguję to.
rahmu
Dzięki za przypomnienie, że w bash jest tryb vi, więc mogę użyć dbw tym scenariuszu w bash. Znalazłem też vi-backward-kill-wordw zsh to, czego chcę, i jest to wygodniejsze niż ustawienie trybu vi w bash. Ale nadal chcę znaleźć skrót trybu emacsa do tego celu w bash.
Vayn
Lub „alt-bC”. W ten sposób nie pozostawia znaku końcowego, co dbw niektórych przypadkach występuje.
Wildcard