2

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

.emacs如果我能避免用特殊代码弄乱我的初始化文件,那就太好了。因此,考虑定义一个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不是一个有效的选项。这个问题有什么好的解决方案吗?

4

2 回答 2

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

这将只为名为A.txt. 当然,您应该根据需要调整代码。

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

UPD

如果您想要单个文件的绑定,只需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-lispdir 中的相应文件。您可以注释掉(load "feature1")以暂时关闭它。

于 2013-08-20T13:15:25.573 回答
2

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

emacs -l start.el a.txt

盒子外面。根据手册页,应该开始emacs编辑a.txt,并加载lisp代码。start.el

这行得通,还是简单的解决方案不适用于您的用例?

于 2013-08-20T14:31:11.250 回答