Wśród wielu przydatnych skrótów klawiaturowych dostępnych w powłoce bash Ctrl - W aby usunąć słowo po lewej stronie kursora. Załóżmy, że moja linia poleceń wygląda następująco:
cp some-file /foo/bar/baz/copy
Teraz oczekuję, że będę mógł nacisnąć Ctrl - W i skończyć z następującymi:
cp some-file /foo/bar/baz/
W wierszu poleceń Vima rzeczywiście działa w ten sposób: Tylko znaki alfanumeryczne są traktowane jako „słowo”, podczas gdy znaki specjalne (np. /
) służą jako ograniczniki oznaczające początek nowego „słowa”.
Ale niestety nie działa tak we wszystkich pociskach, z których korzystałem do tej pory. Tylko spacje ograniczają „słowo”, więc naciśnięcie skrótu za pomocą wiersza polecenia pokazanego powyżej da mi:
cp some-file
Czy istnieje sposób, aby Bash zachowywał się jak Vim? Pewna konfiguracja, którą mogę umieścić w moim .bashrc
?
źródło
Odpowiedzi:
Nie ma to nic wspólnego z Vimem, wszystkie edytory zachowują się w ten sposób (w tym emacs), traktują znaki inne niż słowa jako ograniczniki. W każdym razie zachowanie, o którym mówisz, jest kontrolowane przez
readline
a jego instrukcja zawiera kilka poleceń, do których można przypisać skróty. Wklejam tutaj kilka odpowiednich, ale polecam przeczytanieman readline
po więcej informacji:Tak więc chcesz
backward-kill-word
, który używa znaków niealfanumerycznych jako granic słów. Domyślnie jest przypisany do Alt + Backspace ale możesz to zmienić, używając globalnego/etc/inputrc
jeśli chcesz, aby dotyczyły wszystkich użytkowników lub (lepiej) twojego lokalnego$HOME/.inputrc
.O ile wiem, Ctrl + W wydaje się być zarezerwowany i nie możesz go użyć, ale możesz wybrać inny skrót, Ctrl + jot na przykład. Stwórz
$HOME/.inputrc
plik, jeśli nie istnieje i dodaj do niego ten wiersz:To powinno wystarczyć dla większości nowoczesnych emulatorów terminali. Jednak niektóre starsze terminale używają różnych kodów. Jeśli używasz
xterm
na przykład powyższy wiersz powinien być napisany jako:źródło
\C-w
nie jest zastrzeżone. Po prostu biegnijbind 'set bind-tty-special-chars off'
wyłączyćbind-tty-special-chars
ustawienie, które powoduje, że readline ponownie odczytuje i wiąże znaki specjalne terminala (w tym przypadkuwerase
znak) za każdym razem, gdy ma zostać wprowadzona nowa linia.man
i że nie mogę nadpisać ustawienia w moim.inputrc
.Możesz włączyć tak zwany „tryb vi” readline (a więc i basha), wstawiając następujące wiersze
~/.inputrc
i rozpoczęcie nowej powłoki:Ale zauważysz to
<C-w>
działa tak samo jak w domyślnym trybie Emacs: słowa są rozdzielane spacjami. Możesz to zrobićdT/
lub podobne polecenia. To wciąż naśladowanie, a nie prawdziwy interes. Dostępne mapowania są wymienione w podręczniku readline:Zobacz też ta strona na wiki Vima .
Ale nie sądzę, aby tryb vi readline był tak użyteczny, jeśli często musisz poważnie edytować linię poleceń… czemu nie użyć Vima na serio ?
źródło
Są dwie opcje, które znam, ale żadna z nich nie robi tego bezpośrednio.
set -o vi
. Ref: Pomoc BASH - samouczek Bashźródło