【问题标题】:Special Emacs setup for a single file: Run lisp code at startup from command line单个文件的特殊 Emacs 设置:从命令行启动时运行 lisp 代码
【发布时间】:2013-08-20 22:31:11
【问题描述】:

假设我有我经常编辑的文件A.txt,并且我经常在其中插入文本“测试”。如果我可以按例如,那就太好了。 F5 键将文本“Test”插入缓冲区。但是,当我编辑任何其他文件时,我不希望 F5 键以这种方式绑定。

如果我能避免用特殊代码弄乱我的.emacs init 文件,那就太好了。因此,考虑定义一个新文件start.elA.txt 位于同一目录中。 start.el 的内容可能是:

(defun insert-test-text ()
  (interactive)
  (insert "Test"))
(global-set-key '[f5]  'insert-test-text)

然后我写了一个bash 脚​​本editA 用于在Emacs 中编辑文件A.txt,例如

#! /bin/bash

emacs --run-code-on-init start.el A.txt &

很遗憾,命令行选项run-code-on-init 不是一个有效的选项。这个问题有什么好的解决方案吗?

【问题讨论】:

    标签: bash emacs elisp command-line-arguments


    【解决方案1】:

    我认为你可以通过做得到你想要的效果

    emacs -l start.el a.txt
    

    开箱即用。根据man page,应该启动emacs编辑a.txt,并加载start.el中的lisp代码。

    这行得通吗,或者简单的解决方案不适用于您的用例是否有原因?

    【讨论】:

    • 完美!正是我想要的:)
    【解决方案2】:

    这是我对解决方案的看法:

    (defun insert-test-text ()
      (interactive)
      (insert "test"))
    
    (add-hook 
     'text-mode-hook
     (lambda ()
       (if (string= (file-name-nondirectory (buffer-file-name))
                    "A.txt")
           (local-set-key (kbd "<f5>") 'insert-test-text))))
    

    这将只为名为@9​​87654323@ 的文件定义快捷方式。 当然,您应该根据需要调整代码。

    另外,如果您经常编辑文件,请不要忘记为文件添加书签。 我有一个非常快速的设置(大约两个键和弦)约 20 个文件/目录。 我编辑了很多。设置描述为here

    更新

    如果您想要单个文件的绑定,只需像这样删除file-name-nondirectory

    (add-hook 
     'text-mode-hook
     (lambda ()
       (if (string= (buffer-file-name)
                    "~/A.txt")
           (local-set-key (kbd "<f5>") 'insert-test-text))))
    

    这就是我为保持我的配置可管理所做的 - 在~/.emacs

    (defvar dropbox.d "~/Dropbox/")
    (defvar emacs.d (concat dropbox.d "source/site-lisp/"))
    (add-to-list 'load-path emacs.d)
    (defun add-subdirs-to-load-path (dir)
        (let ((default-directory dir))
          (normal-top-level-add-subdirs-to-load-path)))
    (add-subdirs-to-load-path emacs.d)
    (load "init")
    ;; you can put the code in "source/site-lisp/feature1.el"
    (load "feature1")
    

    这就是我的~/.emacs 的全部内容 - 配置的其余部分是 它是site-lisp 目录中的相应文件。 您可以将(load "feature1") 注释掉以暂时关闭它。

    【讨论】:

    • 谢谢!现在,我可能有许多名为A.txt 的文件(在不同的目录中)。但设置应该只对其中一个有效。这可能实现吗?
    • 如果我能将代码从.emacs 文件中分离出来就好了,正如我所提到的......
    • 感谢您的更新。在我看来,使用Inaimathi 答案中的更简单的-l 开关也可以获得所需的效果。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2012-04-27
    相关资源
    最近更新 更多