Bash: удалить от курсора до конца строки с помощью сочетания клавиш

91

Рассмотрим следующую подсказку bash, где ^обозначает расположение подсказки:

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

Предположим, что я хочу снова зафиксировать ту же ошибку с другим сообщением фиксации. Есть ли способ удалить текст с позиции курсора до конца строки?

Адам Матан
источник

Ответы:

145

Используйте Ctrl+ Kдля удаления от курсора до конца строки.

Используйте Ctrl+ Uдля удаления от курсора до начала строки.

user128285
источник
Какую комбинацию клавиш поставить?
ShooShoSha
@ShooShoSha, попробуйте Shift + Insert
user128285
Каковы значения К и U, я не могу вспомнить на следующей неделе, если я не знаю значения, как их запомнить?
workplaylifecycle
2
@ Hylepo Не знаю, но моя мнемоника Brexit - the UK leaves Europe- U удаляет в начало и K до конца.
Снегопад
47

Это зависит от того, используете ли вы режим редактирования vi ( set -o vi) или emacs ( set -o emacs) в вашей оболочке.

По умолчанию ваша оболочка обычно по умолчанию работает в режиме редактирования emacs.

  • В режиме emacs удаление до конца строки может быть выполнено с помощью команды ctrl- k.

  • Однако, если вы используете режим редактирования vi в командной оболочке, того же результата можно достичь, набрав Esc(что переведет вас в командный режим), а затем d- $(если вы хотите удалить всю строку, введите dd).

Если вы не уверены в том, какой режим редактирования вы используете в своей оболочке, введите команду set -oиз командной строки, и вы сможете определить, какой режим редактирования вы используете в данный момент:

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

Чтобы переключить режим редактирования в командной строке, просто введите:

set -o vi

или же

set -o emacs
Кевин Боуэн
источник
4
Если вы хотите мнемонику, Kозначает «убить» (строка, начинающаяся с позиции курсора).
Грегор Ботеро
5
В командном режиме vi Dработает так же, какd$
glenn jackman
3
+1 за написание правильного ответа и объяснение того, что шеллоты могут его изменить.
TC1
1
>> Спасибо. Кажется, я использую vi, поэтому CTRL + K делает свое дело. - Адам Матан Адам, тогда вы находитесь в режиме emacs, а не в vi.
catch22
1
В Kubuntu oneiric (konsole) работают Ctrl + K и ESC Shift + D. ESC d удаляет часть строки (возможно, до «;»). (Ввод $ после этого просто отправляет $ на консоль.) Я пытался выяснить, как это сделать, довольно давно. Спасибо!
Джо
3

Если вы знакомы только с одним из Zsh и Bash, вот эквивалентные привязки клавиш, которые вам (возможно) понадобятся:

удар

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

ЗШ

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

Другая важная информация

Чтобы получить список привязок клавиш:

# bash
bind -p

# zsh
bindkey
Шридхар Сарнобат
источник
Я не совсем понимаю. Для Bash, не должно ли быть "^k" для Control + K?
wjandrea
Извините, это мое личное обязательство. Я бы поставил привязку по умолчанию, но меня не устраивал синтаксис bash. Так как вы упомянули, что это должно быть, я взял ваше слово и отредактировал свой пост.
Шридхар Сарнобат
1
О хорошо Я сам не знаком с этим, но только что проверил, и это должно быть"\C-k"
wjandrea