Emacs:是否可以为缓冲区分配数字键kb快捷方式?

时间:2014-11-11 02:00:58

标签: emacs

我使用桌面会话在加载之间保存项目状态。有时我正在研究一些在几个缓冲区之间共享的功能,并且很乐意将快速键盘快捷键(如#)分配给缓冲区。然后我可以通过击中cmd-1,cmd-2,cmd-3等来切换fe缓冲区。想法?

谢谢!

2 个答案:

答案 0 :(得分:1)

我为此目的使用此代码:

(require 'bookmark)

(defvar zz-minibuffer-map (copy-keymap minibuffer-local-must-match-map)
  "Keymap for `bookmark-do-quick-jump'")

(define-key zz-minibuffer-map
  [remap self-insert-command] 'zz-self-insert-complete-and-exit)
(define-key zz-minibuffer-map " " "-")

(defvar zz-display-function nil)

(defun zz-self-insert-complete-and-exit (n)
  (interactive "p")
  (self-insert-command n)
  (ignore-errors
    (completion--do-completion nil 'expect-exact))
  (let ((candidates (completion-all-sorted-completions)))
    (cond
      ((null candidates)
       (backward-delete-char-untabify 1)
       (minibuffer-complete))
      ((eq 1 (safe-length candidates))
       (minibuffer-complete-and-exit)))))

;;;###autoload
(defun zz-bookmark-jump (bookmark)
  "Jump to specified bookmark with auto-completion and auto-acceptance."
  (interactive
   (list
    (if (window-minibuffer-p)
        (error "Already in minibuffer")
     (let ((minibuffer-local-must-match-map zz-minibuffer-map))
       (completing-read "Jump to bookmark: " bookmark-alist nil t)))))
  (ignore-errors
    (bookmark-jump bookmark zz-display-function)))

zz-bookmark-jump绑定到您想要的位置,例如 M-m 。 现在,如果您将书签命名为1...,其中...是您想要的任何内容,而不是其他内容 书签以1开头, M-m 1 将跳转到该书签。

以下是我的一些书签供参考:

b:  .bashrc                 ~/.bashrc
e:  .emacs                  ~/.conf.d/.emacs
h:  hooks.el                   - no file -
L:  main.cc                 ~/Dropbox/source/c++/lattice/main.cc
m:  magit                      - no file -
q:   *scratch*                 - no file -
s:  source                  ~/Dropbox/source/

当我致电:时,我想添加bookmark-bmenu-list以使其看起来更好看。

答案 1 :(得分:0)

如果您使用Bookmark+,则可以使用desktop bookmarks。 “跳转”到这样的书签会恢复保存的桌面 - 每个书签都指向一个特定的桌面文件。 书签是持久的。

书签名称可以使用任何字符 - 可以是19312。您可以将单个键(包括数字键,如果您愿意)绑定到跳转到您输入其名称的书签的命令(完成)。

您还可以轻松定义跳转到给定书签的命令。您可以将这样的命令绑定到您喜欢的任何一个键:12,...或-1-2,...(尽管可能不会是一个好主意; - ))。

(FWIW,命令 name 必须是符号名称,符号名称必须包含符号字符,并且不能具有数字的语法(2和{{1}你可以命名命令-2a1,...或a2_1,...或_2,{{}} 1}},....但无论如何,你不可能通过他们的名字来调用这些命令。)


<强> 更新

如果您只想在项目的文件或缓冲区之间切换/导航,不用关闭其他缓冲区等,那么请查找项目支持Emacs功能和扩展。有很多可用的,包括与香草Emacs一起提供的一些(如Dired)。

例如,使用书签+ ,您可以使用各种类型的书签(包括以下内容)来帮助管理软件项目:

  • Dired 缓冲区,包含特定的文件和子目录集 标记或省略,并使用特定的列表开关。

  • -a1缓冲区,具有特定的书签组 被标记或隐藏。

  • 多个替代书签文件。例如,使用a 每个项目不同的一个。或者使用不同的 子项目并将它们一起用于整个项目。

  • DeskTops (已提及),包括变量集和访问缓冲区 和文件。

  • Sequence bookmarks合并其他书签。

您还可以将delicious意义上的标记与大多数相关联 书签类型。 (这些标签与Emacs无关 使用TAGS文件的源代码标签。)书签可以有任何标签 标签数量和多个书签可以具有相同的标签, 这意味着您可以使用它们来组织目标对象。 标签不仅仅是名称:它们可以是用户定义的 attributes ,将Emacs-Lisp对象作为其值。

这些和其他书签+ 功能为您提供了不同的方法 保存,恢复,过滤,访问和以其他方式组织项目,如 关于源代码组件和信息的集合 相关软件。

Icicles增强了对此类书签+ 功能的访问权限,并提供了额外的project-support features