9

我希望能够对我的 .emacs 文件进行更改,而无需重新加载 Emacs。

我发现了三个问题,可以回答我要问的问题(您可以在此处此处此处找到它们),但问题是我刚刚所做的更改是切换,并且作为对其中两个答案的评论(a1 , a2)对这些问题的解释是,那里给出的解决方案(例如 Mx reload-file 或 Mx eval-buffer)不适用于切换。

我想有一种方法可以使用命令再次切换变量,但是如果有一种方法可以重新加载整个 .emacs 并重新评估所有切换而无需指定它们,我会更喜欢。

无论如何,如果有人告诉我如何切换变量的值,我也会很感激,这样如果我只是更改了一个切换,我可以使用命令来完成,而不是仅仅为此重新启动 Emacs(我是 Emacs 的新手)。我不知道这些信息有多大用处,但我应用的更改如下(我从this answer to another question得到):

(setq skeleton-pair t)  
(setq skeleton-pair-on-word t)  
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)  
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)  
(global-set-key (kbd "{") 'skeleton-pair-insert-maybe)   
(global-set-key (kbd "<") 'skeleton-pair-insert-maybe)  

编辑:我将上述内容包含在 .emacs 中并重新加载了 Emacs,以便更改生效。然后我把它全部注释掉并尝试了 Mx load-file。这行不通。下面的建议(如果我第一次使用它来评估切换, PP的 Cx Ce有效,但当我想撤消它时无效)。如果存在这样的事情,我想要一些可以评估评论的东西......

谢谢 :)

4

6 回答 6

6

您可能想尝试的一些事情:

Mx load-file(然后在出现提示时,输入~/.emacs enter)。Mx 表示按元键(通常Esc在 Linux 和 Windows 桌面上)然后按普通x字符键。

或者,当您的.emacs文件打开时,将提示符放在要执行的函数的右括号之后,然后键入Ctrl-X, Ctrl-E。这将执行包含在光标左侧最近的一组括号内的块。

最后一种技术我经常用于复杂的搜索和替换。假设我正在编辑一个 XML 文件,并且我想将结束标记移动到之前的行:我将键入我当前的 XML 缓冲区(query-replace-regexp "[ \r\n\t]*</" "</"),然后将光标立即放在右括号之后,然后键入Ctrl-X, Ctrl-E

于 2010-06-01T12:26:11.043 回答
4

我认为您想尝试打开/关闭骨架对?

我很想通过以下方式做到这一点:

(setq skeleton-pair t)    ; turns skeleton-pair on
(setq skeleton-pair nil)  ; turns skeleton-pair off

在 .emacs 中,按我想尝试的特定版本的右括号旁边的 Cx Ce。当然,我必须记住确保 .emacs 中只有我想要的最终设置,以便下次启动时它会做正确的事情。

于 2010-06-01T14:23:48.367 回答
4

我将上述内容包含在 .emacs 中并重新加载了 Emacs,以便更改生效。然后我把它全部注释掉并尝试了 Mx load-file。这行不通。

它不起作用,因为当您启动 Emacs 时,您设置了一些变量和键。.emacs使用注释掉的这些命令重新加载不会撤消它们。您必须手动覆盖设置才能撤消它们

(setq variable-name nil)

Mx global-unset-keyenter 后跟要取消设置的键。

于 2010-06-01T14:30:17.780 回答
4

您始终可以使用 *scratch* 缓冲区来评估表达式。

如果您想设置变量:

(setq 骨架对 t)^J

未设置:

(setq 骨架对 nil)^J

您必须使用 ctrl-J 来调用评估;return(或 ctrl-M)不起作用。

这适用于所有 lisp 表达式,顺便说一句。如果您需要快速计算:

(+ 51 33)^J 84

或者如果你想找到你的框架的宽度:(frame-width)^J 80

如果您正在修补或要评估非交互式命令或变量,这将非常有用。

于 2010-06-01T20:48:01.343 回答
2

不确定我是否真正理解了您的问题(有点累),但是如何标记您已更改的内容(C-spc)然后是 Mx eval-region?除非我做了一些重要的事情,否则这就是我通常需要的。

于 2010-06-01T14:21:15.750 回答
0

每次评估 elisp 代码时,它都会进入此 emacs 会话的全局 emacs 环境;因此,如果您设置变量值,即使您重新加载 .emacs,它仍然存在于环境中。

如果我们可以在“沙箱”中预加载 .emacs(或任何 lisp)来测试它,那就太好了。当我进行繁重的 .emacs 自定义时,我通常会打开一个 emacs 来编辑 .emacs 并打开另一个进行评估(我可以重新启动它以避免破坏环境)。

于 2010-06-11T09:23:10.770 回答