我使用Emacs和ESS进行R编程,通常我在一些特定的文件夹中工作。由于我的工作环境的配置,我工作的文件夹通常在每个文件夹结构中“非常深”,即,我需要在到达我工作的目录之前指定几个子文件夹:
/Desktop/SUB1/SUB2/SUB3/SUB4...
这很乏味,我必须反复使用CTR+X
CTR+F
来查找文件,即使我只需要在一些地方工作。我想知道,有没有可能允许我定义一些存储我工作的公共位置的变量,当我需要找到任何脚本时,我只需要调用类似的东西:
$SHORTCUT/Script.R
这将是一个类似于Linux窗口管理器中的书签的功能。我知道有一个全局设置环境允许您设置默认目录。但是,这只会使一个文件夹的工作变得容易一些。这是一个改进,但如果我同时处理几个项目,仍然不够好。
有什么建议?
在这里你有几个选择。如果执行以下命令,我有2个书签和文件寄存器
(set-register ?a '(file . "~/.emacs"))
然后执行C-x r j a
或M-x jump-to-register a
,您将跳转到.emacs文件。我鼓励你阅读关于寄存器的文档,它们非常方便。
第二个是书签。您可以在感兴趣的缓冲区中使用C-x r m
为文件或目录添加书签。不要忘记保存书签,否则下次重新启动emacs时它们就会消失。 M-x bookmark save
更新第三个选项是使用你可以在melpa上找到的keychords包
(defun open-this ()
(interactive)
(find-file "~/.emacs") )
(require 'key-chord)
(key-chord-mode 1)
(key-chord-define-global "=-" 'open-this)
然后通过同时或足够快地按下=-
你会转到.emacs文件。一个很好的功能是你可以使用本地模式,所以相同的键和弦会根据你的模式做不同的事情。
这是我过去做过的事情:
(defun jea-open-deep-file (arg)
(interactive "sWhich File?: ")
(cond
((string= "1" arg) (find-file "~/.emacs"))
((string= "2" arg) (find-file "/Users/jamesanderson/code/python/aws/comprehend/README.md"))
((string= "3" arg) (find-file "~/some/other/file/somewhere/else.el"))
(t (message "unknown choice"))))
(global-set-key [(f7)] 'jea-open-deep-file)
那么,我在这里发生了什么?有一个名为“jea-open-deep-file”的函数可以使用“find-file”打开任何文件。如果你想尝试一下,你可以输入你的“.emacs”文件或* scratch *缓冲区来尝试一次。一旦编辑了find-file调用以指向要打开的文件,就可以评估缓冲区(有几种方法可以做到这一点,最简单的讨论是:Alt + X然后是“eval-buffer”而不是底部区域的报价)。
如何使用?在这种情况下,我已将功能映射到F7键。选择一个尚未使用的。所以,一旦安装了eval-buffer,我就可以:
我现在无法访问Windows机器,但是,您可能需要稍微改变路径,例如:"C:\\Program Files (x86)\\Aspell\\bin\\aspell.exe"
这个带有额外的\\ escapes。
每当你想要一个文件添加到jea-open-deep-file时,你都需要重新评估这个函数(起初看起来有点奇怪,但是,这就是你在编辑时编辑编辑器的方式)这是非常好的,无需重新加载整个emacs应用程序。)
编辑:
如果您想跳转到特定行,请尝试:
(defun jea-open-file-goto-line (fname line)
(progn
(find-file fname)
(goto-char 0)
(forward-line line)))
(defun jea-open-deep-file (arg)
(interactive "sWhich File-Line?: ")
(let* ((split (split-string arg "-"))
(file (car split))
(line (string-to-number (cadr split))))
(cond
((string= "a" file) (jea-open-file-goto-line "~/.emacs" line))
((string= "b" file) (jea-open-file-goto-line "/Users/jamesanderson/code/python/aws/comprehend/README.md" line))
((string= "c" file) (jea-open-file-goto-line "~/some/other/file/somewhere/else.el" line))
(t (message "unknown choice")))))
(global-set-key [(f7)] 'jea-open-deep-file)
当提示输入“b-13”(不带引号)时,如果要转到标有“b”的文件的第13行