Отримання <ctrl> + <backspace> для видалення слів у режимі gnome-terminal та vim-вставки


11

Схоже, що ctrl+ Wвидаляє назад одне слово за один раз. Це чудово, але мені дуже подобається, що це працює з ctrl+, backspaceяк і більшість інших програм.

Який найкращий спосіб зробити це? Мені потрібні зміни, щоб вплинути на команди gnome-terminal, командний рядок vim та GUI vim.


1
У vim ви можете натиснути D потім, B, і це зробить те ж саме. Однак я занадто сумую за цією функцією в терміналі, тому що вам потрібно вийти, і вона не працює під час роботи в режимі "Вставка". Високий наконечник для CTRL + W.
mchid

Відповіді:


8

Зауважте, що це буде працювати в терміналі та режимі emacs за замовчуванням (який ви використовуєте, якщо Ctrl+ Wвидаляє попереднє слово для вас). Він не буде працювати в режимі vi-bash і не вплине на сам vi / vim. Отже, це лише часткова відповідь, але найкраще, що може запропонувати цей користувач emacs.


Такими речами керує readlineбібліотека, поведінкою якої можна керувати через ~/.inputrc. Відредагуйте (або створіть, якщо його немає) ~/.inputrcта додайте цей рядок:

"\C-H":"\C-W"

Тепер відкрийте новий термінал, і він повинен працювати.

Пояснення

\C-HНасправді Control+ BackSpace. Ви можете побачити кодові клавіші, натиснувши клавішу Ctrl+, Vпотім клавішу, яку ви шукаєте. Ви побачите, що BackSpaceповертається ^H.

Тепер має бути можливість прив’язати Control+ BackSpaceдо функції bash, яка видаляє попереднє слово ( backward-kill-wordабо unix-word-rubout) за допомогою "\C-H": backward-kill-word. Однак я не можу так працювати. Він прекрасно працює з різними клавішами ( "\C-E": backward-kill-wordнаприклад, робить Ctrl+ Eвидалити попереднє слово), але чомусь я не можу з ним працювати BackSpace.

Отже, як вирішення, ми просто відображаємо Ctrl+ Backspaceдо Ctrl+, Wщо вже відображено backward-kill-word. Отже, коли ви натиснете Ctrl+ Backspace, це буде переведено на Ctrl+, Wяке, у свою чергу, надішле backward-kill-word. Я отримав ідею для цього вирішення з цієї посади в СУ .


4

До недавнього часу gnome-термінал випромінював той самий код на Backspaceі Ctrl+ Backspace, отже, ви не можете розрізнити два у вашій програмі.

Це було зафіксовано в vte-0,42, який є частиною Gnome 3.18, випущеного цієї осені.

Якщо ви використовуєте Wily, оновлені пакети можна знайти в Gnome3 Staging .


чи можу я змусити це працювати по-справжньому, не додаючи цього величезного PPA?
Ciprian Tomoiagă

Не обійшлося без завантаження, виправлення, компіляції та встановлення пакету libvte 2.90, який відповідає справжньому. Виправлення розміщено на bugzilla.gnome.org/show_bug.cgi?id=733246 .
Егмонт

3

Натомість використовуйте Alt+ Backspace: він працює так само, як Ctrl+, Backspaceі не потребує конфігурації.


1

Це працює на моїй машині. Просто переконайтеся, що ви використовуєте tmux від master та nvim від linuxbrew та control + backspace працює також у bash та vim!

(Отримати bash з linuxbrew теж)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.