Скопіюйте та встановіть позначку в Bash як в Emacs?


16

Я хотів би мати можливість копіювати та вставляти текст у командному рядку на Bash, використовуючи ті самі прив’язки клавіатури, які використовує Emacs за замовчуванням (тобто використовуючи C-spaceдля set-mark, M-wдля копіювання тексту C-y, M-yдля вставки його тощо).

У документації GNU Bash йдеться про те, що Bash постачається з деякими з цих ключових прив’язок, встановлених за замовчуванням.

Наприклад, Yanking ( C-y) працює за замовчуванням на мій термінал. Однак я не можу змусити команди set-markі copyкоманди працювати, і вони, здається, не прив'язані до жодних клавіш за замовчуванням.

Зазвичай спосіб, яким користувач може визначити свої власні ключові прив’язки, це додати їх до них .inputrc. Так що я подивився і виявив наступні функції Баш в документації, я вважаю , може допомогти мені визначити Emacs-як поведінка , яке я хочу (тобто set-markз C-spaceі copyз M-w).

copy-region-as-kill ()

Скопіюйте текст у регіоні в буфер вбивства, щоб його можна було витягнути відразу. За замовчуванням ця команда не пов'язана.

і

set-mark (C-@)

Встановіть позначку на точку. Якщо вводиться числовий аргумент, позначка встановлюється в цю позицію.

Якщо я правильно розумію, зазначене вище означає, що copy-region-as-killза замовчуванням не пов'язана жодна послідовність клавіатури, а за замовчуванням set-markприв’язана C-@.

Я спробував C-@на своєму терміналі, але не думаю, що він працює, set-markтому що я не бачу жодного тексту, виділеного під час переміщення курсору. У будь-якому випадку, я спробував додати прив'язки клавіатури ( M-wі C-) до функцій copy-region-as-killі set-markвище у своїх, .inputrcа потім перезавантажив її C-x C-r, але це не вийшло. Я знаю , що інші мої записи в .inputrcроботі , тому що у мене є інші визначені користувачем клавіш , визначені в ній.

Чи є щось, що я роблю неправильно? Я щось пропускаю?


Яку версію bashта яку термінальну програму ви використовуєте?
Мікель

Я використовую GNU bash, версія 3.1.17 (1) -випуск (x86_64-redhat-linux-gnu) на gnome-терміналі (також на Terminator)
Амеліо Васкес-Рейна

Відповіді:


11

Вибір не підкреслює, але в іншому випадку я думаю, що це працює чудово.

Спробуйте запустити

$ bind -p | grep copy-region-as-kill

щоб переконатися, що C-x C-rнасправді спрацювало.

Слід сказати:

"\ew": copy-region-as-kill

Після цього він повинен добре працювати.

Приклад:

$ abc<C-Spc><C-a><M-w> def <C-y>

дає мені

$ abc def abc

Якщо ви хочете коли-небудь знати, де markє, просто зробіть C-x C-x.

Приклад:

$ <C-Spc>abc<C-x><C-x>

поверне курсор туди, де ви встановили позначку (початок рядка).

Крім того, я не думаю, що вам не потрібно додавати set-markприв'язку. Я цього не зробив.

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(зауважте, що більшість терміналів надсилаються C-@при C-Spcнатисканні. Я припускаю, що і ваш робить.)

Якщо все це не вдається:

  • чи працює Ctrl+ Spaceв emacs -nwодному терміналі?
  • чи працюють інші Alt/ Metaярлики в баші?

1
Спасибі! У мене було "Mw" замість "\ ew" у .inputrc. Відсутність виділення також мене бентежило. Дякуємо за вказівник до команди bind до речі. Зараз це працює як шарм!
Амеліо Васкес-Рейна

2
Ласкаво просимо! Так, ви повинні написати \eабо \M-. Дивіться синтаксис файлів read init .
Мікель

Яка чудова відповідь! Спасибі. Це
усунуло

Встановити позначку та копіювати область-як-вбити мовчки, чи можу я виділити регіон (як у emacs)?
mosh

4

Я також пов'язую Cw для вбивства . Ось мій .inputrc:

# Див. Http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
встановити bind-tty-special-chars off

# Визначте мої улюблені прив’язки клавіш Emacs.
"\ C- @": встановлена ​​позначка
"\ Cw": область вбивства
"\ Mw": копіювати область-як-вбити
"\ M- /" dabbrev-розширити
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.