【发布时间】:2014-08-20 15:10:40
【问题描述】:
我正在使用以下解决方案在 Emacs 中快速打开文件(感谢 lawlist for the code)
代码:OPTION # 2 -- 带有选项的函数:
(global-set-key (kbd "<f5>") 'lawlist-bookmark)
(defun lawlist-bookmark (choice)
"Choices for directories and files."
(interactive "c[D]ired | [v]ocab.org | [g]td.org | [d]iary.org | [n]otes.org")
(cond
((eq choice ?D)
(dired "/very/long/and/boring/path/which/make/me/use/tab/for/..."))
((eq choice ?v)
(find-file "/Users/HOME/.0.data/vocab.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?g)
(find-file "/Users/HOME/.0.data/gtd.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?d)
(find-file "/Users/HOME/.0.data/diary.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?n)
(find-file "/Users/HOME/.0.data/notes.org")
(message "Opened: %s" (buffer-name)))
(t (message "Quit"))))
效果很好。我按 F5 然后另一个键打开我的文件。但是,我现在有很多快捷方式,我想通过按两个(或更多)键来调用它们。
例如,我有一个名为“website-kate”的项目,它是一个包含两个主要文件index.html 和stylesheet.css 的文件夹。我想要两个快捷键ki(也就是说:按F5打开快捷键拨盘,先按k,然后按i,分别是“kate”和“index”)和ks(用于“kate”和“stylesheet”)
当然这段代码不起作用:
((eq choice ?ki)
(find-file "/home/user/website-kate/index.html")
(message "Opened: %s" (buffer-name)))
【问题讨论】:
-
您现有的解决方案存在严重的代码和数据混合问题。随着您收藏的书签文件的不断增长,我建议您认真考虑转到链接问题中的选项 #3。 (对于鼠标的使用,它似乎是硬连线的,但正确的键盘映射也是支持键盘的方法。)
-
@tripleee 我没有选择选项#3,因为我不喜欢使用鼠标。如果有一种简单的方法可以使选项#3 适应键盘快捷键,我很感兴趣。我试图用键盘替换鼠标指示,但我没有得到有效的代码......
-
这种方法不能很好地扩展。并且更新可能改变的位置是乏味的。为什么不直接使用 Emacs 书签?这就是他们的目的。您可以使用诸如
F5之类的单键来提示输入书签,并且可以使用一个或多个字符作为书签名称:F5 k i RET。 -
我赞同@Drew 的建议。实施适合您的工作流程的高度专业化的解决方案可能是非常有益的,但有时退后一步,看看 Emacs 提供哪些开箱即用的功能来支持您尝试解决的用例是有意义的。我建议您首先阅读有关 Emacs 书签的
*info*节点:C-h r m Bookmarks RET。如果您出于某种原因不想这样做,TLDR;是: -
@itsjeyd(和 Drew)谢谢,我将探索书签的可能性。
标签: file emacs organization