1

Как очистить текущую строку? Я использую Bash.

Мне не нравятся ctrl+c, потому что это оставляет дерьмо напечатанным на экране.

Если курсор находится в конце строки, я могу использовать Ctrl+U, и он делает именно то, что я хочу. Но если курсор находится посередине, мне нужно использовать последовательность вроде ctrl+e, ctrl+u (или ctrl+a, ctrl+k), чтобы получить желаемое поведение.

Есть ли одно нажатие клавиши, которое делает это независимо от того, где в строке находится курсор?

Мне также интересно, если это возможно в vim (такое же поведение, как 0D но с одним нажатием клавиши)

2 ответа2

5

В bash вы можете связать команду kill-whole-line например, с CTRL-K

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

Это именно то, что вы хотите (от man bash):

kill-whole-line Убить все символы в текущей строке, независимо от того, где находится точка.

Поместите это в ваш ~/.bashrc если вы хотите, чтобы это поведение было постоянным.

Если вы хотите перепривязать CTRL-U вы должны включить следующую строку в ~/.inputrc

set bind-tty-special-chars off

см. этот отчет об ошибке.


В vim вы можете определить ярлык для 0D .

map <C-k> 0D
imap <C-k> <ESC>0Di

Вы можете проверить это в командном режиме : или положить его в ~/.vimrc или ~/.vim/vimrc , чтобы сделать его постоянным. Выберите разумный ярлык для ваших нужд, я использовал CTRL+K чтобы соответствовать примеру bash. Строка imap используется в режиме вставки , поэтому вам даже не нужно переходить в командный режим, чтобы убить текущую строку, то есть это сохраняет два других нажатия клавиш. (Я не vim , так что, возможно, есть лучшие способы добиться этого, но, похоже, это работает ...)

2

Я могу думать о двух нажатиях клавиш (дд). Сначала установите bash в режим vi (который позволяет редактировать команды vi с помощью командной строки bash):

set -o vi

Затем для удаления текущей строки введите dd .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .