【问题标题】:Create aliases in emacs?在 emacs 中创建别名?
【发布时间】:2010-09-15 14:45:16
【问题描述】:

我有一份 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 的访问我半定期访问的文件,这感觉令人难以置信的过度和 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 可以在 Windows 或任何地方工作,也许会更清楚否则。

【问题讨论】:

  • 请详细说明您要查找的内容。当您使用新计算机时,您是否正在重写函数(即,您的 U 盘上没有 .emacs 文件)?
  • 你在重写什么函数? (这些函数的目的是什么,打开某些文件?例如(find-config-file)?)你想去“Cf config-file”并让它自动从取决于哪个位置加载blah.conf你用的机器?

标签: windows emacs elisp


【解决方案1】:

这就是你需要的——

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

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

【讨论】:

  • 感谢您提供这些令人惊叹的 emacs 软件包的指针。很高兴看到 icicles 是一个可用于 Ubuntu 的软件包(从 Lucid 开始)。 Bookmark+ 需要一些愚蠢的手动安装步骤,但非常值得....
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我在下面有这个设置。例如,如果我想在我的桌面 (D:/Desktop) 上查找一个文件,我键入 F3 j F3,无论我从哪个路径开始,minibuffer 现在都会显示“D:\Desktop\”并且我m 准备好在桌面上键入任何文件名。我将快捷方式设置为 j、k、l、i b/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)))) 
    

    【讨论】:

      【解决方案4】:

      我把它移到了原来的问题中,但我把它留在这里,因为人们已经回复了它

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

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

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

      这有意义吗?

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

      【讨论】:

      • 这确实应该添加到问题中。 (或者也许澄清问题,然后将其作为答案发布。)
      【解决方案5】:

      你想要的是打开一个给定的文件,只需一个命令,你可以定义一个键盘宏。 这个宏打开文件~/.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 访问bashrc

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

      M-x insert-kbd-macro
      

      【讨论】:

        【解决方案6】:

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

        (defalias 'nuke 'delete-trailing-whitespace)
        

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

        M-x d-t-w [RET]
        

        将运行delete-trailing-whitespace

        【讨论】:

          【解决方案7】:

          我不太清楚你的要求。我将常用文件存储在 .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(必要时加载它)。

          这就是你要找的吗?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-15
            • 2023-03-09
            • 2013-01-13
            • 1970-01-01
            • 1970-01-01
            • 2011-02-18
            相关资源
            最近更新 更多