2013-03-02 2 views
1

Я хотел бы переключаться между двумя последними посещенными буферами (текущий и предыдущий) и привязывать команду к M-b.Переключение между двумя последними буферами в emacs

(switch-to-buffer (other-buffer)) теоретически должен это сделать, но добавление следующего кода к моему .emacs не имеет никакого эффекта.

(defun my-switch-to-other-buffer() 
    "Switch to other buffer" 
    (interactive) 
    (switch-to-buffer (other-buffer))) 

(global-set-key [M-b] 'my-switch-to-other-buffer) 

Пожалуйста, предложите исправить это код выше или сделать лучший способ выполнить эту задачу.

ответ

4

Ваш код выглядит очень хорошо и, кажется, работает в моей сессии emacs.

Вы уверены, что синтаксис [M-b]?

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

(global-set-key (kbd "M-b") 'my-switch-to-other-buffer) 

Я всегда определить мои комбинации клавиш так, как я, как правило, забывают, как правильно? \ C- # все, что получить имя правильно.

Используя kbd, он очень прост, так как он принимает строку, имеющую тот же синтаксис, что и эхо-сигнал decribe-key, обычно связанный с C-h C-k.

Таким образом, мне просто нужно набрать C-h C-k на случай, если я не знаю, как будет помечен ключ, и поместите вывод этой команды в мой вызов на kbd. Особенно в тех случаях, когда не представляется очевидным, как правильно это сделать. kbd чрезвычайно полезен даже для более сложных имен (kbd "<backtab>") и тому подобного.

+0

Отлично, 'kbd' заставило его работать. Я неправильно подумал, что '[...]' принял синтаксис, обозначенный буквой 'описать-ключ'. –

+0

Лекс Фридман: векторный эквивалент '[? \ M-b]' (см. 'C-h i g (elisp) Последовательности клавиш RET'). 'kbd' действительно проще. – phils

+1

@LexFridman @phils '[(meta b)]' работает, а IMO - это наиболее читаемый формат описания ключевых слов. Хотя сейчас я использую формат 'kbd'. –

3

Хорошо, прежде всего избегайте повторного связывания M-b, поскольку это слово назад, и вам будет полезно поддерживать привязки по умолчанию и изучать их, чтобы вы могли использовать Emacs, когда ваша конфигурация недоступна , скажем, в удаленной коробке или другом незнакомом месте. (Я знаю, что шансы на это, вероятно, уменьшаются в эти дни.) Другая, более важная причина в том, что это привязка по умолчанию на /readline, которая доступна в большем количестве мест, чем я хотел бы упомянуть.

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

На макинтош, сделайте то же самое с Cmd (хотя это уже связано с супер, и имеет кучу макинтош определенных клавиш уже связаны.)

Наконец, всегда переназначить Caps-Lock даже если вы не используете его для замены, которую многие люди используют, это еще один модификатор, который вы можете повторно использовать и использовать чаще в Emacs (на самом деле никогда не нужно использовать кепки-блокировку, если есть M-l, M-u и M-c.) - как только вы получили гипер и супер вы получили легко другой сто привязок доступны модификатора + ключ ярлыков типа.

Кроме того, я знаю, что это массивная проблема, но C-x benter переключится на предыдущий буфер.

+0

IMHO в наше время это скорее стандартные сочетания клавиш emacs, которые портят общий рабочий процесс с использованием внешних приложений. Используя его в течение слишком длительного периода времени, это бесчисленное количество раз. Я открываю 3 новых файла, пытающихся переместить курсор вниз (C-n) и открыв открытые 4 диалоговые окна печати (C-p), прежде чем я действительно пойму, что происходит. Оглядываясь назад, я был бы счастлив, если бы я слишком рано менял привязки emacs, теперь я застрял с ними. Тем не менее +1 как нарушение некоторых из самых фундаментальных ключевых слов может быть не лучшей идеей. – mikyra

+0

@Solomojo Oh, и BTW Я уверен, что использование супер супер и тому подобное не так уж плохо, но если вы используете emacs в терминале, как и я, эти привязки не будут доступны. Даже невозможно отличить C-i от TAB и C-m от RET там, так как оба посылают^I и^M. – mikyra

+0

, и здесь я думал, что мой ответ был для Лекса. – ocodo

0

BTW вышеуказанный код lisp не работает (иногда он переносит вас в другой буфер, отличный от предыдущего). Emacs имеет встроенную функцию для выполнения этой задачи: mode-line-other-buffer

Смежные вопросы