Emacs:如何定义 'bookmark' 目录变量
Emacs: how to define 'bookmark' variables of directories
我使用 Emacs 和 ESS 进行 R 编程,通常我在几个特定的文件夹中工作。由于我工作环境的配置,我工作的文件夹在每个文件夹结构中通常是"very deep",即我需要指定几个子文件夹才能到达我工作的目录:
/Desktop/SUB1/SUB2/SUB3/SUB4...
很繁琐,我不得不反复使用CTR+X
CTR+F
来查找文件,即使我只需要在几个地方工作。我想知道,是否有任何可能允许我定义一些变量来存储我工作的常用位置,并且当我需要查找任何脚本时,我只需要调用类似的东西:
$SHORTCUT/Script.R
这将是 Linux window 管理器中类似于书签的功能。我知道有一个全局设置环境允许您设置默认目录。但是,这只会使一个文件夹的工作更容易一些。这是一个进步,但如果我同时从事多个项目,仍然不够好。
有什么建议吗?
这里有几个选项。我为您准备了 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
更新
第三种选择是使用 keychords 包,您可以在 melpa
上找到它
(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* 缓冲区来试试它一次。编辑查找文件调用以指向要打开的文件后,您可以评估缓冲区(有几种方法可以做到这一点,最简单的方法是:Alt+X 然后 "eval-buffer" 底部区域没有引号)。
如何使用?在这种情况下,我已将函数映射到 F7 键。选择一个您尚未使用的。所以,一旦安装了 eval-buffer,我就可以去:
- F7
- 它提示我"Which File?"
- 我输入 1、2 或 3,然后点击 RETURN
- emacs 打开文件
我现在无法访问 windows 机器,但是,您可能需要稍微更改路径,例如:"C:\Program Files (x86)\Aspell\bin\aspell.exe"
这个加上额外的 \\逃脱。
任何时候你想添加一个文件到 jea-open-deep-file,你都需要重新评估函数(起初看起来有点奇怪,但是,你就是这样 "edit the editor while you are editing" 不用重新加载整个 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"(不带引号)
我使用 Emacs 和 ESS 进行 R 编程,通常我在几个特定的文件夹中工作。由于我工作环境的配置,我工作的文件夹在每个文件夹结构中通常是"very deep",即我需要指定几个子文件夹才能到达我工作的目录:
/Desktop/SUB1/SUB2/SUB3/SUB4...
很繁琐,我不得不反复使用CTR+X
CTR+F
来查找文件,即使我只需要在几个地方工作。我想知道,是否有任何可能允许我定义一些变量来存储我工作的常用位置,并且当我需要查找任何脚本时,我只需要调用类似的东西:
$SHORTCUT/Script.R
这将是 Linux window 管理器中类似于书签的功能。我知道有一个全局设置环境允许您设置默认目录。但是,这只会使一个文件夹的工作更容易一些。这是一个进步,但如果我同时从事多个项目,仍然不够好。
有什么建议吗?
这里有几个选项。我为您准备了 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
更新 第三种选择是使用 keychords 包,您可以在 melpa
上找到它(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* 缓冲区来试试它一次。编辑查找文件调用以指向要打开的文件后,您可以评估缓冲区(有几种方法可以做到这一点,最简单的方法是:Alt+X 然后 "eval-buffer" 底部区域没有引号)。
如何使用?在这种情况下,我已将函数映射到 F7 键。选择一个您尚未使用的。所以,一旦安装了 eval-buffer,我就可以去:
- F7
- 它提示我"Which File?"
- 我输入 1、2 或 3,然后点击 RETURN
- emacs 打开文件
我现在无法访问 windows 机器,但是,您可能需要稍微更改路径,例如:"C:\Program Files (x86)\Aspell\bin\aspell.exe"
这个加上额外的 \\逃脱。
任何时候你想添加一个文件到 jea-open-deep-file,你都需要重新评估函数(起初看起来有点奇怪,但是,你就是这样 "edit the editor while you are editing" 不用重新加载整个 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"(不带引号)