按工作空间,我的意思是 - 我需要保存我的打开缓冲区的状态(可能在用户指定的工作区文件中)并快速切换到另一组打开的缓冲区,例如继续处理与另一个项目相关的文件。
是否有允许这样的Emacs插件?你会推荐哪一个?
答案 0 :(得分:10)
我使用save-visited-files和workgroups的组合。事实上,工作组可能会完成你想要的大部分工作。
我的配置:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; workgroups for windows
(setq wg-prefix-key (kbd "C-c z")
wg-no-confirm t
wg-file (concat emacs-persistence-directory "workgroups")
wg-use-faces nil
wg-switch-on-load nil)
(defun wg-load-default ()
"Run `wg-load' on `wg-file'."
(interactive)
(wg-load wg-file))
(defun wg-save-default ()
"Run `wg-save' on `wg-file'."
(interactive)
(when wg-list
(with-temp-message ""
(wg-save wg-file))))
(with-library 'workgroups
(define-key wg-map (kbd "C-l") 'wg-load-default)
(define-key wg-map (kbd "C-s") 'wg-save-default)
(workgroups-mode 1)
(add-hook 'auto-save-hook 'wg-save-default)
(add-hook 'kill-emacs-hook 'wg-save-default))
答案 1 :(得分:6)
就个人而言,我一直在使用`persp-mode':
emacs的视角,基于Nathan Weizenbaum的
perspective-el
。 但是框架之间共享的视角+从/向文件保存/恢复的能力。
答案 2 :(得分:2)
desktop.el将对您的情况有所帮助。
它可以(从其介绍页面复制)从emacs包缓冲区:
保存桌面,即 - 一些全局变量 - 具有相关文件的缓冲区列表。对于每个缓冲区也 - 主要模式 - 默认目录 - 重点 - 商标&标记活跃 - 缓冲区只读 - 一些局部变量
答案 3 :(得分:2)
如果您使用的是Linux / Gnome3,可以试用此扩展程序:https://extensions.gnome.org/extension/361/emacs-manager/ 此扩展允许您通过管理多个emacs守护程序同时处理不同的项目,并保存/恢复缓冲区的状态。
答案 4 :(得分:2)
HIROSE Yuuji的revive.el已经很好地为我工作了很长一段时间。我使用revive.el中的注释中提供的标准配置。文档写得很好,恢复非常容易使用和配置。特别是,revive.el比一些用于恢复更复杂的配置的支持更好。如果你把它与HIROSE Yuuji的windows.el结合起来,那就特别好了。他们是一起工作的。 windows.el可以调用窗口分割等.revive.el的构建着眼于可扩展性,可以针对特定设置进行更深层次的模式集成。但是对于我的用途,我发现它开箱即用,但我想我接下来会调整它以恢复我目前没有设置的w3m窗口(更新:我现在这样做:见底部。
这是我的复活配置。我提供了一些有用的评论,首先是针对windows.el,然后是revive.el inline:
(provide 'my-revive-config)
(require 'windows) ; use this with revive so that window splits are recallable
; too
(win:startup-with-window) ; start with window 1
;;;[Key Bindings]
;;;
;;; The default prefix key stroke for Windows is `C-c C-w'. If it
;;; causes you some troubles, see the section `Customizations'.
;;; Here are the default key bindings.
;;;
;;; C-c C-w 1 Switch to window 1 (Q)
;;; C-c C-w 2 Switch to window 2 (Q)
;;; :
;;; C-c C-w 9 Switch to window 9 (Q)
;;; C-c C-w 0 Swap windows with the buffer 0 (Q)
;;; (Select unallocated frame(Emacs 19))
;;; C-c C-w SPC Switch to window previously shown (Q)
;;; C-c C-w C-n Switch to next window
;;; C-c C-w C-p Switch to previous window
;;; C-c C-w ! Delete current window (Q)
;;; C-c C-w C-w Window operation menu
;;; C-c C-w C-r Resume menu
;;; C-c C-w C-l Local resume menu
;;; C-c C-w C-s Switch task
;;; C-c C-w = Show window list (Q)
;;;
;;; The key strokes to select windows from 1 to 9 must be
;;; frequently used, so the alternative key strokes `C-c [Num.]' are
;;; available by default (And any function with (Q)mark can be
;;; invoked without C-w). To disable these quick key strokes, set
;;; the variable win:quick-selection to `nil' in your ~/.emacs.
(autoload 'save-current-configuration "revive" "Save status" t)
(autoload 'resume "revive" "Resume Emacs" t)
(autoload 'wipe "revive" "Wipe Emacs" t)
(define-key ctl-x-map "S" 'save-current-configuration)
(define-key ctl-x-map "F" 'resume)
(define-key ctl-x-map "K" 'wipe)
;;;
;;;[How to use]
;;;
;;; Call `save-current-configuration' (`C-x S' if you define key as
;;; above) when you want to save current editing status and call
;;; `resume' to restore it. Numerical prefix arg to them specifies
;;; the buffer number in which the editing status will be saved.
;;; Here the buffer refers to a revive s-exp in ~/.revive.el of
;;; which there can be n
;;;
;;; [Sample Operations]
;;; C-u 2 C-x S ;save status into the buffer #2
;;; C-u 3 C-x F ;load status from the buffer #3
其他人有revive-plus.el和slightly modified clone on github等变体,但我更喜欢原作。
2015年1月12日星期一更新:现在我可以恢复w3m(请参阅revive.el文档以获取详细信息,特别是查看revive中的示例:major-mode-command-alist-default):
(setq revive:major-mode-command-alist-private
'(("*w3m*" . w3m)))
请注意,您正在告诉我们恢复w3m缓冲区的名称。即使您有多个选项卡,也只需要枚举第一个选项卡。
这是我设置的w3m变量,用于恢复上一个会话中的所有标签:
(setq w3m-session-load-last-sessions t)
答案 5 :(得分:0)
弹丸模式可能实现您的目标:
要在项目中切换缓冲区,请执行以下操作:projectile-switch-to-buffer
要切换项目:射弹切换到项目
我有这样的东西:
(global-set-key (kbd "C-x b") '(λ ()
(interactive)
(if (projectile-project-p)
(call-interactively 'projectile-switch-to-buffer)
(call-interactively 'ivy-switch-buffer))))
(global-set-key (kbd "C-x B") 'ivy-switch-buffer)