В ванильном Emacs, я должен сделать, C-x b
а затем вручную введите имя буфера для переключения. Если я забуду название буфера, я должен нажать TAB
на список возможных завершений. Что я могу сделать, чтобы ускорить этот процесс?
key-bindings
buffers
cycling
nixeagle
источник
источник
C-x C-<left/right>
для быстрого переключения буферов. При необходимости переключения на «более дальний» буфер я используюIBuffer
.Ответы:
Есть режим ido, который должен помочь.
РЕДАКТИРОВАТЬ:
поместите это в файл инициализации, чтобы активировать режим ido по умолчанию:
(ido-mode 1)
Теперь
C-x b
покажу вам список кандидатов.Поместите это в файл инициализации, если вы предпочитаете, чтобы элементы отображались вертикально:
(setq ido-separator "\n")
Предоставлено ergoemacs
Позвольте мне также предложить этот пост, говорящий о переключении на предыдущий / следующий буфер.
источник
Я недавно начал использовать
C-x <left>
иC-x <right>
. Это обе стандартные привязки Emacs - ничего настраивать. Слева вы вернетесь к предыдущему буферу (изначально так же, какC-x b RET
), но при повторном выполнении вы вернетесь к третьему последнему посещенному буферу. Если вы часто переключаетесь между 3 или 4 буферами, я нахожу это намного проще, чем пытаться запомнить имена буферов.Также я только что обнаружил
C-x C-<left>
иC-x C-<right>
привязан к тем же функциям, так что вы можете просто удерживать нажатой клавишу управления и переключаться между x и стрелками, чтобы пролистывать буферы. Довольно мило!источник
Вы могли бы использовать шлем .
В моей настройке я переключился
C-x b
наM-l
. Это связано с темhelm-buffers-list
, что делает процесс довольно быстрым, по крайней мере, для меня.источник
ido
илиiswitchb
илиicicles
, и тому подобное, но они в основном устарели от Хелма. Да,ace-jump-buffer
это круто, но это не так быстро, как у Хелма, потому что прежде чем вы знаете, какую клавишу нажимать, вы должны найти буфер в списке. Helm позволяет сузить список несколькими нажатиями клавиш, которые вы уже знаете (например, имя буфера). Я используюC-TAB
для переключения буферов, загрузки последних файлов, закладок и т. Д. Нет ничего быстрее.helm
. Но я предпочитаю использоватьhelm-mini
, который также показываетRecentf
вhelm-buffers-list
.ivy-switch-buffer
.Просто чтобы добавить твики, которые я использую с уже упомянутым Ido :
Я также использую
ace-window
для переключения между буферами вместе с ,ace-jump-mode
чтобы прыгать между видимыми окнами. Приходит с некоторыми привыкать, но стоит попробовать.Я объединил его
key-chord-mode
и нажалso
для быстрого прыжка:Все вышеперечисленные пакеты доступны через менеджер пакетов от Melpa.
источник
use-package
с ,require
чтобы избежать путаницы. В данном примере пользователю не нужно устанавливать дополнительный пакет для реализации этого решения.Как @kuanyui говорит в комментарии,
next-buffer
иprevious-buffer
очень быстро, если у вас есть только несколько буферов цикла среди. (Для более чем нескольких, и для большего количества возможностей выбора буфера, я используюicicle-buffer
.)Однако по умолчанию
next-buffer
иprevious-buffer
находятся на префиксном ключеC-x
.Это означает, что они не повторяются : вы не можете просто ударить
C-x <right> <right> <right>...
. Вместо этого вы должны либо связать эти команды с разными повторяемыми клавишами, либо использоватьC-x <right> C-x <right> C-x <right>...
, что не очень быстро.Для повторяющихся версий этих команд загрузите библиотеку
misc-cmds.el
и переназначьте ванильные, неповторяющиеся версии на определенные там повторяемые версии:(Точно так же в той же библиотеке вы найдете версию,
undo
которую можно повторять даже при использовании префиксного ключа:.undo-repeat
)Кстати, вы можете сделать практически любую команду повторяемой (даже для клавиши префикса), используя функцию
repeat-command
(frommisc-cmds.el
). Это все, что было необходимо для определения повторяемой версииnext-buffer
:источник
C-,
и,C-.
чтобы получить повторяемость, и, пока вы на нем все равно, установитеC-x.
иC-x,
кother-window
и(lambda()(interactive)(other-window -1))
. Велосипедные окна, вероятно, требуют меньше повторяемости, и вы уйдете за минуту без лишних пакетов.next-buffer
иprevious-buffer
лучшее решение, независимо от какой-либо конкретной привязки ключа. Поэтому мой комментарий.Я удивлен, что никто
iswitchb
еще не упомянул . Это может быть не так сильно, какido
, но задолго до того,ido-mode
как родился,iswitchb-mode
уже был стандарт для Emacs, и это все еще полезно в наши дни. Чтобы попробовать это просто положитьв свой .emacs или активировать через
M-x iswitchb-mode
.источник
iswitchb
устарел с Emacs 24.4. Все его функциональные возможности доступны черезido
сейчас.Используйте helm-buffer-list или helm-mini для визуального выбора записи в буфере и нечеткого соответствия. Это может сделать много вещей вне переключения буферов. Вы должны увидеть демо в ссылке.
источник
Другие обсуждали пакеты, которые полезны для облегчения жизни в отношении переключения буфера / окна / фрейма. (Лично я использую
helm
это феноменально.) Я хочу обсудить более простые изменения, которые могут сделать процесс Emacs более приятным.Для меня решение моих проблем с буфером / фреймом (потому что я думаю, что
C-x o
это худшее) не было пакетом; это было простоC-;
наother-window
(циклически проходя через окна)C-'
наother-frame
(циклический просмотр кадров). Я на самом деле начал использовать кадры намного больше после добавления этого ярлыка).help
всплывающего окна (при чтении man-страниц, кстати и т. д.) с любым окном, которое было ранее видно).Я также подумал, что поделюсь несколькими мыслями о привязках клавиш, которые новички могут найти полезными. (Извините, если это не то место.) У меня нет конкретных предложений, а есть «философия», которая позволяет мне поддерживать эффективный набор комбинаций клавиш для себя.
Редко используемые команды не заслуживают легкой привязки клавиш.
keyfreq.el
и посмотрите, что вы действительно много используете. Я использую метод выживания наиболее приспособленных, чтобы решить, какие команды получают самую ценную недвижимость на моей клавиатуре.C-\
это отличный ярлык (по причинам , изложенным в # 2) ... и это было бы преступлением оставить его сопоставляется с его командой по умолчанию:change-input-method
. (Может быть, некоторые из вас используют это часто, я, конечно, не.)Следующие факторы определяют легкость и скорость сочетания клавиш (начиная с наиболее важных):
Ctrl
,Meta
и т.д.). Например, для меня это намного быстрее,C-c C-l C-p
чем для удараC-x o
. Мне лично очень неудобно отрыватьCtrl
клавишу между последовательными нажатиями клавиш данной последовательности клавиш; гораздо проще просто помять кнопку-модификатор (в данном случаеCtrl
). (На этот конкретный пример может повлиять тот факт, что я переназначил свойCtrl
ключ и мойCaps-Lock
ключ.)C-c C-l C-p
чем для удараC-p C-' C-;
. (Попробуйте, и это должно быть очевидно.) Вообще говоря, намного проще использовать последовательности нажатий клавиш, которые используют чередующиеся руки (или, по крайней мере, чередующиеся пальцы на одной и той же руке).Просто пара мыслей, которые, как я думал, могут быть полезны для новичков. Я могу добавить еще немного позже.
источник
Я использую
windmove.el
иbs.el
для быстрого переключения буферов. Оба режима включены в Emacs.windmove.el
- переключается на окно (буфер, который отображается в данный момент) в указанном направлении, например, влево, вправо, вверх, вниз.bs.el
- Я используюbs-cycle-next
иbs-cycle-previous
для переключения на следующий буфер, который в данный момент не отображается в окне.Вы можете установить windmove с
(windmove-default-keybindings)
которой будет связывать соответствующие командыShift-Left Arrow
,Shift-Right Arrow
и т.д.Для настройки
bs.el
, что-то вроде этого будет работать:источник
windmove.el
находится на странице EmacsWiki «Переключение буферов», плюсbs.el
работает на буферах, а не окнах.Самый быстрый способ переключить буферы, о которых я знаю, это с
ace-jump-buffer
. Одно нажатие клавиши открывает меню буфера и затем выбирает букву рядом с нужным буферомace-jump-line-mode
. Это работает лучше всего для 26 или около того самых последних буферов. Для переключения на буферы дальше в вашей истории использования,ido-switch-buffer
всегда хороший выбор.источник
Я предпочитаю навигацию в стиле браузера. Я привязал Ctrl + Tab и Ctrl + Shift + Tab к следующим и предыдущим буферам соответственно:
источник
Вообще говоря, есть 2 способа переключения буферов, и большинство решений попадают в один из них.
Это то, что
C-x b
делает по умолчанию. Ido дает вам хорошее автозаполнение, так что вам не нужно так много вкладывать TAB TAB TAB. Такие проекты, как helm, projectile и т. Д., Облегчают эту задачу, давая вам возможность работать с файлами в проекте и т. Д., И вместе с ido они могут быть весьма полезны.Это полезно, когда у вас так много буферов, и вы хотите получить список их всех. Вы можете перейти вверх и вниз по буферу и нажать клавишу ввода, чтобы перейти к определенному файлу. Ибуффер довольно хорош для этого.
Я использую оба, и вот как вы можете настроить его.
источник
Помимо ido, у меня есть следующие настройки.
В случае плохого режима используйте следующие привязки клавиш для переключения буферов
Установить имя буфера в качестве заголовка окна. Это поможет вам при навигации по указанным клавишам
Если вы используете злой режим, вы можете попробовать
evil-leader
. Свяжите часто используемые ключи с лидером. Например, вы можете связатьC-x b
с<leader>-b
.Привязать режим Dired к
C-<f8>
. Теперь, когда вы хотите открыть файл в каталоге, нажмитеC-<f8>
, перейдите к имени файла и нажмитеa
вместоRET
. Так что закаленный буфер будет убит немедленно.Используйте
recentf
режим для навигации по последним файлам.C-x C-r
Последний важный момент - используйте эргономичную механическую клавиатуру. Таким образом, вы можете легко и быстро нажимать клавишу ctrl на запястье, не причиняя вреда мизинцу.
Надеюсь, это может кому-то помочь.
источник
Как видно из других ответов, существует множество способов упростить эту конкретную задачу. Я лично использую Lusty Emacs в качестве моего устройства переключения буфера, так как он довольно хорошо справляется с нечетким завершением. Это минимизирует количество нажатий клавиш, необходимых для выбора нового буфера, например, мне нужно только набрать oxr для переключения на ox -карт .el или даже просто o во второй раз, так как он также отслеживает историю переключений.
источник
Если вы хотите просто продолжать чистить свои буферы, добавьте это в ваш файл инициализации:
Вам нужен пакет привязки клавиш , и вы можете изменить привязку клавиш по своему желанию, но я нашел эти сочетания клавиш наиболее удобными. Перед добавлением этого фрагмента вам необходимо указать bind-key,
источник
Я использовал C-Tab и CS-Tab как общие приложения.
источник
Это не очень элегантное решение (поскольку оно использует макросы вместо функций), и оно не объясняет, как быстро перейти к любому буферу, а только как перейти к буферам, которые использовались недавно. Но это работает очень хорошо для меня:
У меня есть серия макросов, которые используются
ido-switch-buffer
для перехода к предыдущему буферу, буферу до этого, буферу до этого и т. Д. И я связал эти макросы с привязками клавиш, которые я считаю удобными.Чтобы перейти к последнему буферу:
Чтобы перейти к предпоследнему буферу:
Чтобы перейти к предпоследнему буферу:
И т. Д. (Вы можете объявить столько,
?\C-n
сколько захотите, чтобы вернуться к истории посещенных буферов, сколько захотите).Существует встроенная функция для перехода к предыдущему буферу, но преимущество использования макросов в
ido-switch-buffer
том, что вы можете настроить переменнуюido-ignore-buffers
для удаления специальных буферов, таких как*Messages*
или*scratch*
любой другой нежелательный буфер, из списка. Таким образом, единственные буферы, к которым вы переходите, - это те, к которым вы действительно заинтересованы.источник
На моей виртуальной машине Cx ALT-RIGHT / LEFT слишком медленный. Я должен ждать Cx, чтобы зарегистрироваться в строке состояния, прежде чем я смогу сделать что-нибудь еще. плюс его слишком много ключей. Поэтому я сопоставил C-TAB и CM-TAB с буфером next и prev, так как это то, что я делаю в большинстве программ Windows. Это легко сделать из Emacs:
M-x
вы попадете в строку состояния. Затем введите,global-set-key
который запросит у вас последовательность клавиш, которую вы хотите связать (C-TAB
), а затем команду, с которой вы хотите связать ее (next-buffer
). Это оно!источник