Простые привязки клавиш Emacs

Я переношу две операции, которые я делаю все время в Emacs:

  1. Создайте новый буфер и вставьте буфер обмена. C-S-n
  2. Закройте текущий буфер. CSW
  3. Переключитесь на последний просматриваемый буфер. C-ВКЛАДКА

Я чувствую себя подобно акробату клавиатуры при выполнении первых двух операций. Я думаю, что стоило бы попробовать некоторые пользовательские привязки клавиш и макросы.

Несколько вопросов об этой настройке:

  1. Как я сделал бы макрос для № 1?
  2. Эти хорошие привязки клавиш? (Я знаю, что это немного субъективно, но они могли бы использоваться чем-то популярным, которое я не использую.)
  3. Кто-либо нашел макрос C-ВКЛАДКИ, который будет действовать как Alt+Tab в Linux/Windows? А именно, я хочу иметь стопку буферов согласно последней просматриваемой метке времени (новый на вершине). Я хочу продолжить циклически повторяться через стек, пока я не отпустил клавиши Ctrl. Когда клавиша Ctrl выпущена, я хочу, чтобы текущий буфер получил обновленную позицию по стеку.
5
задан itsjeyd 9 April 2014 в 20:04
поделиться

3 ответа

  1. начинают с вызова start-kbd-macro , заканчивают с end-kbd-macro . После этого вы можете сразу же протестировать новый макрос с помощью call-last-kbd-macro . Если вас устраивает результат, вы можете сохранить макрос .
  2. Emacs обычно не использует сочетания клавиш C-S, и они просты в использовании, поэтому я бы назвал их хорошими. Они могут вызвать проблемы, если вы используете терминальную версию Emacs, но я полагаю, что это не так.
  3. Я использую этот простой фрагмент:

    (global-set-key (kbd "") 'bury-buffer)

bury-buffer в основном делает текущий буфер последним в буфере- list, чтобы вы могли циклически переключать буферы в предсказуемом порядке.

1
ответ дан 14 December 2019 в 13:28
поделиться
  1. Я бы не стал делать для этого макрос, но написал бы функцию, как кто-то другой опубликовал на этой странице. Вместо (cua-paste nil) вы также можете использовать (yank) . Я не уверен, что лучше и почему.
  2. Они мне не очень нравятся. Для вещей, которые я часто использую, я хотел бы делать как можно больше акробатических трюков с мизинцем, так что это будет означать модификатор + клавиша вместо модификатора1 + модификатор2 + клавиша .. или использовать функциональную клавишу, если вы не чувствуете себя привязанным к главной строке .
  3. без комментариев
1
ответ дан 14 December 2019 в 13:28
поделиться

Пробовали ли вы использовать для этого вертикально или горизонтально разделенные окна (через C-x 3 или C-x 2)? Кажется, что это даст вам меньше шагов - даже если вы реализуете что-то вроде того, о чем вы говорите.

Я обнаружил, что разделенные окна действительно ускоряют операции копирования и вставки. Для переключения между окнами я использую клавиши со стрелками на клавиатуре (windmove-left/-right/-up/-down), поэтому достаточно нажать всего одну клавишу, и вы переходите в нужное вам окно.

Думаю, это немного отличается от того, о чем вы просите, но, похоже, это поможет немного ускорить работу.

C-x влево и C-x вправо перебирают буферы, но для этого нужно нажать несколько раз, нельзя просто удерживать клавишу нажатой.


Для создания макроса для #1, вы просто запускаете макрос, нажимаете клавиши, которые вы обычно делаете, чтобы создать новый буфер, и останавливаете макрос.

Так что это будет что-то вроде:

C-x ( C-x b NEW RET C-x )

После завершения вставки вы можете сохранить NEW в файл, чтобы снова использовать макрос для создания нового буфера. C-x e, чтобы опробовать макрос. Если он работает, вы можете сохранить его в файле init.el. Это делается так:

M-x name-last-kbd-macro

Затем вы получите приглашение ввести имя по вашему выбору. Оно подходит только для текущего сеанса. Затем сохраните макрос с именем в файле инициализации. Сначала откройте файл .emacs или init.el. Затем поместите точку в то место, где должно находиться определение макроса, затем введите:

M-x insert-kbd-macro

Теперь вы можете запустить макрос, используя его имя через M-x . Вы также можете привязать макрос к клавишам (в файле .emacs или init.el):

(global-set-key (kbd "C-c a") '<macroname>)

Например, вот как будет выглядеть ваш init. el будет выглядеть после создания макроса, открывающего новый буфер под названием NEW, не связанный с файлом, и привязки этого макроса к C-c n:

;; Creates a new unassociated buffer called NEW
(fset 'new-buffer "\C-xbNEW\C-m");
;; Shortcut for new-buffer
(global-set-key (kbd "C-c n") 'new-buffer)

Вы также можете добавить операции вставки, закрытия буфера и переключения буфера. Думаю, вам придется сохранять буфер в файл вручную.

Некоторые ресурсы

4
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: