Czy można skonfigurować Ctrl-W (usunąć słowo)?

40

Zwykle Ctrl+ Wusuwa z powrotem do ostatniej białej spacji.

Czy można go skonfigurować tak, aby używał dodatkowych znaków, takich jak /?

Edycja: Aby być bardziej zrozumiałym: nie chcę konfigurować klucza, chcę też zatrzymać zatrzymanie usuwania /.

Przykład:

vim /foo/bar^W
vim /foo/
SkaveRat
źródło

Odpowiedzi:

29

Dla mnie zadziałało dodanie następujących wierszy do mojego .bashrc

stty werase undef
bind '\C-w:unix-filename-rubout'

Potrzebujesz linii undef, inaczej bash ignoruje twoje nowe powiązanie C-w

mkm
źródło
3
Należy zauważyć, że stty werase undefpowstrzyma cię od używania Cw w dowolnym programie (wiązanie pozwoli ci używać w trybie readline)
0fnt
24

Powinieneś być w stanie użyć Esc, a następnie cofnij, aby usunąć słowa rozdzielone ukośnikami.

Możesz to zmienić, umieszczając to w tobie .bashrc:

bind '\C-f:unix-filename-rubout'

Teraz użyj, Ctrl+f aby robić, co chcesz.

Nie teraz
źródło
1
dzięki, to polecenie działa. czy istnieje sposób na zastąpienie polecenia Cw? Jeśli zmienię to na C-w:..., domyślne zachowanie usuwania do następnego miejsca nadal się uruchamia. Na innym klawiszu (jak F), jeśli działa dobrze.
SkaveRat
Nie sądzę, że ctrl-w jest zarządzany przez samą powłokę. Może być również zarządzany przez tty. Jakie są twoje ustawienia tty stty -a? czy masz control-w jako domyślny znak dla werase? Jeśli usuniesz to ustawienie z tty, używając comman stty werase undef, to czy bash działa zgodnie z oczekiwaniami?
eppesuig
23

W przypadku tego konkretnego problemu możesz także użyć:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Dobry odnośnik: Przygody z wymazywaniem słowa bash

fedorqui
źródło
2
Niesamowite! Większość innych odpowiedzi sugerują ponownego wiązania Ctrl+wlub Ctrl + B lub coś unix-filename-rubout, ale jest to o wiele lepiej, że jest wbudowany Oprawa: M-Backspace (Alt + Backspace lub Esc Backspace)
Colin D Bennett
Nie działało dla mnie
ethanjyx
@ethanjyx oh. Pracuję nad GNU bash. Czy ty też jesteś w tym smaku?
fedorqui
7

Dzięki bash możesz uzyskać pożądany efekt, umieszczając w pliku ~ / .bashrc następujące:

bind '"\C-w":backward-kill-word'

Naciśnij CTRL+Vi kombinację klawiszy, aby zobaczyć, jak wygląda emulator terminala. Na przykład CTRL+bkspmożna interpretować inaczej na różnych terminalach, np . ^HLub ^?. ^Charakter jest taki sam jak CTRL.


źródło
Myślę, że moje pytanie nie było wystarczająco szczegółowe. Chciałem mieć /jako dodatkowy znak stop, a nie sposób na powiązanie komendy delete-word-polecenie z innym klawiszem. Zredagowałem swoje pytanie
SkaveRat,
Użycie słowa „zabijanie wstecz” przypisane do \ Cw spowoduje skasowanie wstecz do ostatniego podanego ukośnika, jeśli występuje w danym słowie, i skasuje słowa rozdzielone białymi spacjami. Nie tego chciałeś?
Mój system używa ^F- ale użycie "\^F"w powyższym skrypcie nie działa
SkaveRat
1
CtrlZnak jest napisany \Cw skrypcie i nie \^.