在emacs中创建别名?

时间:2008-10-06 20:10:18

标签: windows emacs elisp

我有一个emacs的副本,我在拇指驱动器的几台不同的(Windows)计算机上使用,我想知道是否有可能创建一些类似于bash别名或符号链接的内容emacs的?我可以在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,这感觉有点过头了。设置新文件需要付出很多努力。

但最大的问题在于我认为它不适合我的工作流程。当我想访问一个文件时,我总是C-x C-f,如果我意识到“嘿,我正在工作”,那么我必须C-g M-x go-awesome。也许更清楚的是,如果我说我希望能够做一些相当于ln -s /some/awesome/dir但是内置于emacs的内容,而不是内置到操作系统中,以便C-x C-f ~/awesome/some/sub/dir可以工作在窗户或其他任何地方。

7 个答案:

答案 0 :(得分:11)

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

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

然后我可以跳转到jump-to-registerC-x r j)的文件:

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

这就是你要找的东西吗?

答案 1 :(得分:2)

如果您想要某个功能的别名,请使用defalias

(defalias 'nuke 'delete-trailing-whitespace)

但如果你抱怨Emacs的功能名称太长,你应该调查partial-completion-mode。随着打开,

M-x d-t-w [RET]

将运行delete-trailing-whitespace

答案 2 :(得分:2)

这就是你需要的 -

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

  • Icicles书签+ 一起使用。每当您使用 C-x C-f 等访问文件时,您也可以visit a file or directory bookmark(完成书签名称)。当您在迷你缓冲区中完成文件名时,只需点击 C-x m 即可。

答案 3 :(得分: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

然后你可以通过名字来调用它 M-x visitbashrc

您可以通过访问此文件将定义保存到文件.emacs中 并使用

在其中插入定义
M-x insert-kbd-macro

答案 4 :(得分:0)

我在下面有这个设置。例如,如果我想在我的桌面上找到一个文件(D:/桌面),我输入F3 j F3,无论我开始使用什么路径,迷你缓冲区现在都说“D:\ Desktop \”而我' m准备在桌面上键入任何文件名。我将快捷方式设置为j,k,l,i b / c,这些快捷方式靠近我左手的位置,但是使用此设置,任何最多4个字母的快捷方式都可以。所以你可以为你的“awsome”文件添加一个条目,比如说“敬畏”,你可以输入F3 awe F3进入访问你的文件。不知道这是否是你要找的;但这节省了很多打字;)

(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)))) 

答案 5 :(得分:0)

这个blog entry几乎完全定义我想要的东西,基本上让我在迷你缓冲区中点击$,然后向我提供我可以跳转到的书签列表。我可能会调整它,以便如果我指定一个文件书签,它会将我带到文件而不是目录,但这是一个特别的问题,特别是考虑到书签的文件往往位于列表的顶部。

答案 6 :(得分:-1)

我将此移至原始问题,但我将其留在此处,因为人们已经回复了

这比我的方式更好,但我觉得可能存在的东西会取代,例如:

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

并且感觉不那么hacky,并且它实际上正在做它本来应该做的事情,而不是做一些非常重的东西,因为感觉应该是非常轻的东西。

这有意义吗?

但是你对寄存器的分配实际上可能比我正在寻找的更好。