zsh kill Ctrl + Backspace, Ctrl + Delete

11

Как настроить зш так, чтобы Ctrl+ Backspaceубивал слово перед точкой? Как этого добиться Ctrl+ Deleteубивает слово за пунктом?

Я использую urxvt в качестве эмулятора терминала.

студент
источник
Во-первых, вы должны определить «слово». Это только буквенные символы? Все не пробельные символы?
Микель
это слово используется в терминологии emacs
студент
Если ни одно из приведенных ниже решений не работает, обратитесь по адресу : stackoverflow.com/questions/21252419/… .
AP.

Ответы:

11

Сначала я сосредоточусь на Ctrl+ Delete.

Вызывается команда zsh для удаления целого слова вперед kill-word. По умолчанию это связано с Alt+ D.

Как сделать Ctrl+ Deleteсделать это тоже зависит от того, какой эмулятор терминала вы используете.

В моей системе это работает в xterm и Gnome Terminal:

bindkey -M emacs '^[[3;5~' kill-word

и для urxvt вы должны сделать:

bindkey -M emacs '^[[3^' kill-word

Если это не сработает, попробуйте набрать Ctrl+ V Ctrl+, Deleteчтобы увидеть значение в вашей системе.

Вы даже можете добавить оба из них вместе .zshrcили использовать вывод tput kDC5вместо жесткого кодирования последовательности.

Ctrl+ Backspaceкажется сложнее.

В моей системе нажатие - это то же самое, что нажатие только Backspace.

Если у вас то же самое, я думаю, что лучше всего использовать вместо него Alt+ Backspaceили Ctrl+ W.

Mikel
источник
Я использую urxvt в качестве эмулятора терминала
студент
Ctrl + Backspaceне работает
ученик
Вам нужно ^[[3^для urxvt. Ctrl+V Ctrl+Deleteпокажу тебе это.
Микель
1
Спасибо, я добавил bindkey '^[[3^' kill-word bindkeyи '^H' backward-kill-wordмой .zshrc. Теперь это работает!
ученик
@ user5289: Ах, извините, мы не поняли друг друга. Я не думаю ^Hили не ^?буду работать Ctrl+Backspace. На самом деле кажется, что такое связывание невозможно. Alt+Backspaceили Ctrl+Wможет быть адекватной заменой.
Микель
3

На urxvt, для удаления обратной части, у меня просто есть .zshrcследующее:

bindkey '^H' backward-kill-word

и это позволяет мне удалить предыдущее слово с помощью Ctrl + Backspace

benterris
источник
2

У меня есть это в моем .Xresources:

URxvt.keysym.C-BackSpace:       \033[33~

и что в моем .zshrc:

bindkey -M main -M viins -M vicmd   '^[[33~'    backward-kill-word

Это убивает каждое разделенное пробелами слово. Обратите внимание, что '^ [' является символом Escape. Вы должны xrdb -load .Xresourcesоткрыть терминал и затем нажать, ^Vа затем ^BackSpace.

jchnkl
источник
1

Добавьте следующее к вашему ~/.zshrc

bindkey '^H' backward-kill-word
bindkey '5~' kill-word
rysama
источник