Bash: чи можу я встановити Ctrl-Backspace для видалення слова назад?


19

Коли в оболонці (bash) - я хочу, щоб Ctrl-Backspace прив'язувався до "видалення слова назад". Це можливо?

Редагувати :

Я використовую konsole- термінал у KDE.


2
Питання прямо вперед, на це жодних нарікань. Я просто хочу прокоментувати, що часто варто багато чого полегшити "стандартні" прив'язки клавіш, які вже існують у багатьох додатках, замість того, щоб налаштувати їх без реального виграшу та впевненості, що ніколи не побачити поведінку в закордонних системах. Ctrl+wце те, до чого слід звикнути, імхо.
Даніель Андерссон

@ Даніель Андерссон: або в якості альтернативи - Ви можете розробити спосіб передачі Ваших налаштувань на іноземну машину.
Adobe

Обмін точковими файлами - це вирішена проблема, але це не дуже допомагає на інших, більш-менш локальних комп'ютерах, де у вас є досить відкриті привілеї. Якщо ви перебуваєте в іноземній системі, ви, швидше за все, не маєте свободи переналаштовувати подібні речі (принаймні, не без того, щоб розбитися колежанами, які також використовують ту саму машину :-)). Також кожна нова заявка потребуватиме спеціального лікування.
Даніель Андерссон

6
У мене є зворотна проблема, я звик Ctrl-wяк "видалити попереднє слово" в консолі, і робити це за інстинктом навіть у Eclipse або Chrome, коли це означає закрити вкладку / закрити поточний файл. Досить дратівливий.
Езеквіль Мун

1
У мене така ж проблема з Chrome SShInATab. Як зробити ctrl-W без ctrl-W? :)
Riccardo SCE

Відповіді:


11

Чому б просто не використовувати Alt+ Backspaceабо Ctrl+ W, які вже відображені в більшості терміналів. Не впевнений у консолі. Xmodmap (man xmodmap) також може використовуватися для перенастроювання інших користувацьких ключів. (Парадоксально, але xmodmap не може перезаписати Backspace дуже добре, оскільки термінал перекриває відображення, але він добре працює з більшістю клавіш ...).


9
Тому що я використовував Ctrl-Backspace у своєму Emacs. Я знав про Ctrl-w. Alt-Backspace для мене новий (+1).
Adobe

1
Хороший момент, @hellork. Ви можете перехопити контроль + backspace на сервері X (через xmodmap) і зіставити його з деяким невикористаним символом (наприклад, alt-backspace).

4
Прикро в цьому те, що ctrl + backspace - це дійсно поширене відображення для "видалення слова назад" у більшості програм GUI у більшості основних операційних систем. Так само Ctrl + W широко розповсюджений для "закритого вікна". Alt + w рідко використовується для чогось, що я можу придумати. Стандартизація була б чудовою. Цікаво, що може бути більшим зривом, зміною терміналів чи зміною графічного інтерфейсу?
naught101

1
@naught, Control-W - це вже клавіша стерти слово за замовчуванням на терміналах Unix. Так, це суперечить конвенції Windows / GUI, але насправді вона вийшла першою - через багато років. Звинувачуйте Microsoft!
alexis

11

Я знайшов цю тему через Google, але відповідь була не тим, що я хотів почути. Тому я грав:

На моєму терміналі нормальна зворотна область надсилається ^H, тоді як ctrl + backspace надсилається ^?. Таким чином, слід просто провести перезавантаження ^?для видалення слова, яке за замовчуванням доступне за допомогою Ctrl + W.

Перша (невдала спроба):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Отже, це має працювати:

$ bind '"\C-?":unix-word-rubout'

Однак це не ... хтось може пояснити?

Друга (успішна) спроба:

$ bind '"\C-?":"^W"'

Де значення ^Wє буквальним / сировим ^W(натисніть ctrl + V, потім ctrl + W, щоб відобразитися).


Насправді, ваше перше рішення працювало на мене! Другий не став.
Дрю Хоскінс

Здається, друга спроба замінити саму резервну область, а не Ctrl-Backspace?
користувач541686

7

Просто відредагуйте ~/.inputrc(можливо, вам доведеться створити його або скопіювати /etc/inputrcтуди), щоб він містив:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Це також позначить Ctrl+ +, Deleteщоб видалити слово поруч із курсором.


Не працює для мене.
Джонатан

6

Тут є кілька хороших відповідей, але я вирішив це в Консолі за допомогою Налаштувань-> Редагувати поточний профіль-> Клавіатура-> Редагувати, а потім додати відображення від Backspace+Controlдо \x17. (Я знайшов код ASCII для використання Ctrl-w showkey --ascii.)


Дякуємо, що вказали на те, що с showkey. Таким чином я зрозумів, що ALT+Dдля видалення слова перед курсором буде відповідати \x1b\x64.
loki

Дякую, це вирішило мою проблему. У моєму випадку мені потрібно перезаписати Alt + Backspace і його послідовність \x1b\x7f.
DDMC

3

Це залежить від того, що баш бачить. При регулярній термінальній взаємодії, bash не бачить, які ключові модифікатори ви натиснули, лише отриманий символ. Наприклад, Backspace - це те саме, що і Control-H. Утримування перемикання або управління не має значення.

ЗАРАЗ, ваш термінальний додаток (xterm? Cmd? Термінал? Шпаклівка? Залежно від вашої ОС) може бачити ваші натискання клавіш, і, можливо, є спосіб відобразити комбінацію клавіш керованого простору на те, що баш може розрізнити крім резервної області.


Я виявив, що мій баш не бачить зворотного простору. Але можливо, це можливо, щоб це побачило.
Adobe

@adobe, що ти маєш на увазі? Наберіть "stty" на своєму терміналі, а потім прочитайте посібник про це. Якщо ^ H встановлено як ваш символ стирання, ви можете встановити його на щось інше ... якщо у вас є вагомі причини.

1
Є гарний приклад того, як це зробити на сайті github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole дозволяє вам це зробити. Скопіюйте один з файлів * .keytab з / usr / share / kde4 / apps / konsole / в ~ / .kde / share / apps / konsole та модифікуйте його за допомогою пропозицій у посиланні, видаливши рядок "key Backspace" та додавання: key Backspace-Shift-Control : "\x7f"і key Backspace-Shift+Control : "\E[9;3~"також змінити рядок заголовка, поки ви знаходитесь у ньому: keyboard "Xfree4 Modlist"наприклад. Потім ви можете додати "\e[9;3~": backward-kill-word"до ~ / .inputrc
Адам,

2

Спробуйте це:

bind '"\C-_":backward-kill-word'

Необов’язково додайте до ~ / .inputrc, щоб зробити його постійним:

"\C-_": backward-kill-word

Працює на базі 4.3.11 у Kubuntu 14.04


2
Контрольно-зворотний простір навряд чи буде таким самим, як підкреслення контролю.
Томас Дікі

1
З усіх речей, які я спробував у цій темі, це спрацювало! Використання "GNU bash, версія 4.3.48 (1) -release (x86_64-pc-linux-gnu)" на bash на windows / WSL
Markus Jevring

Це чудово працює для мене в Cygwin, використовуючи GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin).
zagyi

1

У Консолі:

  • клацніть Settings -> Edit current profile
  • натисніть вкладку "Клавіатура" -> [Edit...]
  • натисніть [Add]кнопку та під Key Combinationтипом стовпця Backspace+Ctrl. У Outputтипі стовпців 0x08(що зазвичай є символом зворотної області)

Тепер ви повинні мати змогу відобразити цей ключ на backward-kill-wordvia

# ~/.bashrc

bind '"\x08":backward-kill-word'

Спасибі. Для мене працює, як мінімум, у xfce4-терміналі.
limon

0

На більшості терміналів CTRL + W вже має видалити слово назад. Це працює з xterm, і я думаю, він працює з konsole. CTRL + W - це стандартне прив’язка клавіш для текстової програми, яка працюватиме з vim у режимі вставки, emacs та всіх оболонках.


5
У Ctrl-w я прив’язаний до "закрити вкладку" в Emacs, FireFox, Krusader - тому я встановив, що це також комбінація закриття вкладок у Konsole.
Adobe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.