Bash: usuń od kursora do końca linii za pomocą skrótu klawiaturowego


91

Rozważ następujący monit bash, gdzie ^oznacza lokalizację monitu:

$ git commit -am "[bug 123456] Do this and that with the bug"
                               ^

Załóżmy, że chcę ponownie zatwierdzić ten sam błąd, używając innego komunikatu zatwierdzenia. Czy istnieje sposób usunięcia tekstu z pozycji kursora do końca linii?

Odpowiedzi:


145

Użyj Ctrl+, Kaby usunąć z kursora do końca linii.

Użyj Ctrl+, Uaby usunąć kursor z początku linii.


Jaka jest kombinacja klawiszy?
ShooShoSha,

@ShooShoSha, spróbuj Shift + Insert
user128285,

jakie są znaczenia K i U, nie pamiętam tego w przyszłym tygodniu, jeśli nie znam znaczeń, jak je zapamiętać?
cykl workplaylif

2
@hylepo Dunno, ale mój mnemonik to Brexit - the UK leaves Europe- U usuwa się na początku, a K na końcu.
Snowcrash

47

Zależy to od tego, czy używasz trybu edycji vi ( set -o vi) czy emacs ( set -o emacs) w swojej powłoce.

Domyślnie twoja powłoka zazwyczaj domyślnie pracuje w trybie edycji emacsa.

  • W trybie emacsa usuwanie do końca linii można wykonać za pomocą polecenia ctrl- k.

  • Jeśli jednak używasz trybu edycji vi w powłoce poleceń, ten sam rezultat można osiągnąć, wpisując Esc(co spowoduje przejście do trybu poleceń), a następnie d- $(jeśli chcesz usunąć całą linię, wpisz dd).

Jeśli nie masz pewności, jakiego trybu edycji aktualnie używasz w powłoce, wpisz polecenie set -oz wiersza poleceń, a będziesz w stanie określić, którego trybu edycji używasz obecnie:

set -o
...snip...
emacs           on
...snip...
vi              off

Aby przełączyć tryb edycji wiersza polecenia, wystarczy wpisać:

set -o vi

lub

set -o emacs

4
Jeśli chcesz mnemonika, Koznacza kill (linia rozpoczynająca się od pozycji kursora).
Gregor Botero,

5
W trybie komend vi Ddziała tak samo jakd$
glenn jackman

3
+1 za napisanie właściwej odpowiedzi i wyjaśnienie, że skorupki mogą ją zmienić.
TC1

1
>> Dzięki. Wygląda na to, że używam vi, więc CTRL + K załatwia sprawę. - Adam Matan Adam, to w tym trybie emacs jesteś, a nie vi.
catch22

1
W Kubuntu oneiric (konsola) działają Ctrl + K i ESC Shift + D. ESC d usuwa część wiersza (może do „;”). (Późniejsze wpisanie $ po prostu wysyła $ do konsoli.) Od jakiegoś czasu próbowałem wymyślić, jak to zrobić. Dzięki!
Joe

3

Jeśli znasz tylko jeden z Zsh i Bash, oto równoważne przypisania klawiszy, których możesz potrzebować:

grzmotnąć

bind '"\C-k"':kill-line

zsh

bindkey "\C-k"      vi-kill-eol

Inne istotne informacje

Aby uzyskać listę powiązań klawiszy:

# bash
bind -p

# zsh
bindkey

Jestem zmieszany. W przypadku Bash, czy nie powinno to być "^k" Control + K?
wjandrea,

Przepraszam, to moje osobiste zobowiązanie. Umieściłbym domyślne wiązanie, ale nie byłem zadowolony ze składni bash. Odkąd wspomniałeś, co powinno być, uwierzyłem ci na słowo i zredagowałem mój post.
Sridhar Sarnobat

1
OK Sam nie jestem tego zaznajomiony, tylko sprawdziłem i powinno być"\C-k"
wjandrea,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.