8

我有一份 emacs 副本,我在拇指驱动器上的几台不同(Windows)计算机上使用它,我想知道是否有可能在 emacs 中创建类似于 bash 别名或符号链接的东西?我可以在 find-file 中使用的东西是我正在寻找的主要内容,例如:C-f <some link>将带我去某个地方。目前,我每次使用新计算机时都必须添加一个新的 defun,这有点痛苦,我发誓我在某个地方见过这个,但是几个月的谷歌搜索却一无所获。

我现在得到的是这样的:

(defun go-awesome ()
   "Find my way to my work home"
   (interactive)
   (find-file "c:/cygwin/home/awesome"))

但是,对于仅仅访问一个相当 hacky 的访问我半定期访问的文件来说,这感觉非常过头和 hacky。而且建立一个新文件需要付出很多努力。

但在我看来,它最大的问题是它不适合我的工作流程。当我想访问一个文件时,我总是这样做C-x C-f,如果我意识到“嘿,我在工作”,我就必须这样做C-g M-x go-awesome。如果我说我希望能够做一些相当于ln -s /some/awesome/diremacs 内部的事情,而不是内置在操作系统中,那么这C-x C-f ~/awesome/some/sub/dir将在 Windows 或其他任何地方工作,也许会更清楚。

4

7 回答 7

12

我不是很清楚你在问什么。我将常用文件存储在 .emacs 中的寄存器中:

(set-register ?c '(file . "c:/data/common.txt"))
(set-register ?f '(file . "c:/data/frequent.txt"))

jump-to-register然后我可以用( )跳转到一个文件C-x r j

例如,“ C-x r j c”带我去c:/data/common.txt(必要时加载它)。

那是你要找的吗?

于 2008-10-06T21:05:56.260 回答
2

如果你想要一个函数的别名,你可以使用defalias

(defalias 'nuke 'delete-trailing-whitespace)

但是如果你抱怨 Emacs 的函数名太长,你应该查看partial-completion-mode. 开启后,

M-x d-t-w [RET]

将运行delete-trailing-whitespace

于 2008-10-07T05:59:31.203 回答
2

这就是你需要的——

  • 定义与您要重新访问的上下文相对应的书签。使用Bookmark+,这不仅是一个文件。它也可以是整个 Emacs 桌面或带有标记(已保存)的 Dired 缓冲区、一组其他书签、...

  • 冰柱Bookmark+一起使用。每当您使用C-x C-fetc. 访问文件时,您还可以访问文件或目录书签(完整的书签名称)。C-x m当您在文件名完成的迷你缓冲区中时, 只需点击即可。

于 2011-11-02T16:54:03.380 回答
0

我你想要的是只用一个命令打开一个给定的文件,你可以定义一个键盘宏。这个宏打开文件 ~/.bashrc

 C-x( # start defining the macro
 C-x C-f ~/.bashrc   
 C-x )  # end definition

然后你可以命名这个宏

M-x name-last-kbd-macro
visitbashrc   #give it a name

然后你可以通过名字 Mx visitbashrc 来调用它

您可以将定义保存到文件中,例如 .emacs 通过访问此文件并将定义插入其中,使用

M-x insert-kbd-macro
于 2008-10-14T09:22:52.183 回答
0

我在下面有这个设置。例如,如果我想在我的桌面 (D:/Desktop) 上查找一个文件,我键入 F3 j F3,无论我从哪个路径开始,minibuffer 现在都会显示“D:\Desktop\”并且我m 准备好在桌面上键入任何文件名。我将我的快捷方式设置为 j、k、l、ib/c,它们靠近我左手的位置,但是通过这种设置,任何最多 4 个字母的快捷方式都可以使用。所以你可以为你的“awsome”文件添加一个条目,比如“awe”,然后你可以输入 F3 awe F3 enter 来访问你的文件。不知道这是否是你要找的;但这为我节省了很多打字时间;)

(global-set-key [f3] 'ffap)

;comcplete shortcut in minibuffer
(define-key minibuffer-local-completion-map (kbd "<f3>")
                      'complete-minibuffer-path) 

(defun complete-minibuffer-path ()
  "Extension to the complete word facility of the minibuffer by
replacing matching strings to a specific path"
  (interactive)
  (setq found t)
  (cond
     ; just add new entries if needed; shortcut up to 4 letters will work
     ((looking-back "j" 5 nil) (setq directory "D:/Desktop/"))
     ((looking-back "k" 5 nil) (setq directory "D:/Documents/"))
     ((looking-back "l" 5 nil) (setq directory home-dir))
     ((looking-back "i" 5 nil) (setq directory "D:/Programs/"))
     (t (setq found nil)))
  (cond (found (beginning-of-line)
                (kill-line)
                (insert directory))
         (t (minibuffer-complete)))) 
于 2008-12-13T18:26:29.673 回答
0

这个博客条目几乎准确地定义了我想要的,基本上让我$在 minibuffer 中点击,然后向我展示我可以跳转到的书签列表。我可能会对其进行调整,以便如果我指定一个文件书签,它会将我带到文件而不是目录,但这是一个小问题,特别是考虑到书签所在的文件无论如何都倾向于位于列表的顶部。

于 2009-12-19T22:13:09.580 回答
-1

我将其移至原始问题中,但我将其留在这里,因为人们已经对此做出了回应

这比我所拥有的要好得多,但我觉得可能存在的是可以替代的东西,例如:

(defun nuke ()
   "alias delete-trailing-whitespace"
   (interactive)
   (delete-trailing-whitespace))

并且感觉不那么老套了,就像它实际上在做它应该做的事情,而不是为了感觉应该很轻的事情而做一些真正沉重的事情。

那有意义吗?

不过,您对寄存器的分配实际上可能比我正在寻找的要好。

于 2008-10-07T05:29:41.873 回答