2009-08-31 16 views
8

Chcę zmienić separatory bash (lub readline), aby oddzielić słowa. W szczególności chcę, aby '-' nie ograniczają słowa, tak, że jeśli mam tekstZmienianie separatorów słów w bash

ls some-file 

i pędzę Alt-Backspace usuwa całą some-file tekst, a nie tylko do '-' char. Spowoduje to również szybsze i łatwiejsze usuwanie długich flag, takich jak --group-directories-first, wymagających tylko jednego naciśnięcia klawisza.

Wierzę, że tak zachowuje się Zsh i chciałbym, aby bash zachowywał się w ten sam sposób.

+0

Znak "-" ma specjalne znaczenie w linii poleceń, więc domyślne zachowanie nie jest zaskakujące. Jeśli możesz to zmienić, czy pojawią się jakieś efekty uboczne? Załóżmy, że wpisałeś polecenie "ls -al some-file", czy chcesz usunąć wszystko? – pavium

+0

@pavium w tym przypadku chciałbym, aby 'some-file' został usunięty na początku, a gdy zostałbym naciśnięty po raz drugi, chciałbym aby' -al' został usunięty. – spatz

+1

Właśnie znalazłem [odpowiedź] (http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word) na superuser.com. – Ekans

Odpowiedz

7

ctrl-w robi dokładnie to, co chcesz.

+0

Przeczytałem tę część instrukcji milion razy, nie mogę uwierzyć, że to przegapiłem. Dzięki :) – spatz

+3

Zauważyłem, że po eksperymentach z nim trochę nie jest jeszcze optymalna, ponieważ ukośniki są ignorowane jako separatory, co jest denerwujące podczas pracy ze ścieżkami. Dodałem wiersz '" \ ew ": unix-filename-rubout' do'/etc/inputrc', a teraz M-e usuwa słowo ignorując myślniki, ale traktuje ukośniki jako separatory. – spatz

3

Należy pamiętać, że odwzorowanie klawisza bash dla ctrl-W nie będzie działać, jeśli ustawienie stty werase jest przypisane do ctrl-W. Jeśli uruchomisz "stty -a" i zobaczysz "werase =^W", które będzie miało pierwszeństwo i użyjesz tty idei, co oznacza granica słowa. Pomysł tty na granicę słowa jest zwykle spacja, podczas gdy funkcja bash w tył-zabij słowo obejmuje również - i /.

Jeśli chcesz, aby Alt-Backspace zrobić to samo co ustawienie werase, można to zrobić: wiążą ' "\ M \ Ch": unix-word-rubout' wiązania „" \ M- \ C- ": unix-word-rubout”

Ponadto, jeśli faktycznie chciał zrobić Ctrl-W to, co robi Alt-Backspace, zrobiłbyś: stty werase undef # chyba że zrobisz to ignoruje bash następująca komenda bind bind "" \ Cw ": backwards-kill-word '

+1

Niezwiązane z OP, ale 'stty werase undef' całkowicie naprawił mój problem! Dzięki! –

1

Może to być przydatne: Ctrl-r zainicjuje odwrócone-i-wyszukiwanie (dla historii I bieżącej linii), dzięki czemu można po prostu uderz w kosmos i uciekaj, i wraca ponownie chcesz, lub ctrl-r ponownie (po uderzeniu w pierwsze miejsce), jeśli chcesz wrócić jeszcze jeden argument. Następnie możesz opcjonalnie zabić resztę linii.

Szczególnie przydatna, gdy mamy do czynienia z argumentami o długich ścieżkach (np. W cp lub diff) i trzeba zmodyfikować koniec pierwszego argumentu.

Próbowałem uzyskać \ M-b, aby to zrobić, ale zatrzymuje się na ukośnikach.

Powiązane problemy