Emacs

使用,扩展或开发Emacs的人员的问答

2
如何在Evil中获得类似于Vim的撤消行为?
Evil中的默认撤消行为过于粗糙,因为它考虑了在进入插入模式和将其保留为一个编辑操作之间发生的任何事情。在一次插入过程中输入整个文本段落,然后执行撤消操作时,将删除整个段落。与此相反,只要在插入模式下通过输入文本以外的其他方式移动光标,Vim就会启动一个新的撤消单元。 Evil具有一个自定义变量,可用于获取更细粒度的撤消历史记录: (setq evil-want-fine-undo t) 使用此设置,就像在Vim一样,在插入模式下移动光标时,Evil将启动一个新的撤消单元。但是,此设置也弄乱了替换操作的处理方式:如果使用替换单词cw,则必须撤消两次以还原原始单词:一次用于删除新单词,一次用于重新插入原始单词。这与Vim不一致,并且没有太大意义,因为replace应该是原子的。 问题:如何配置Evil和undo-tree以获得Vim的撤消行为?

2
加载文件和加载之间的区别
我浏览了两个函数的文档,但是它们似乎并没有散布太多信息。它们之间的实际区别是什么,除了事实load是C源代码中的内置函数,而load-file是交互式列表编译函数。 init.el由于两者似乎都在做相同的工作,因此推荐使用什么功能?
17 elisp  functions 

1
如何在LaTeX / AUCTeX分项环境中缩进项目?
问:如何在LaTeX itemize环境中获得“正确的”缩进auctex? 在这里,我想和item一个itemize环境在一起: \item 相对于环境的开始,行缩进了两个空格 项目中的延续线相对于该\item行缩进了两个空格 这是我希望/期望看到的: \begin{itemize} \item Here's a really long item in a LaTeX itemize environment; note how the *initial* item line is indented two spaces, and the continuation lines are indented another two spaces. \end{itemize} 可以使用LaTeX-item-indent变量调整项目的初始缩进,该变量默认为-2。有了这个默认情况下,我得到的不良行为\item不被缩进,但我做得到延续行通过额外的两个空格被抵消的所需行为: \begin{itemize} \item Here's a really long item in a LaTeX …

4
存在哪些emacs社区?
请维护一个社区Wiki答案,该答案描述以GNU Emacs为主要主题的电子邮件列表,Wiki,博客,irc频道,论坛或其他社区。 为了被列出,社区必须是“开放的”,这意味着任何人都可以参与。 该规则可以,应该并且已经例外。运用判断力。例如:当然,Sacha的博客和Xah的网站都属于此列表。
17 learning 

2
使用稍有不同的名称保存当前文件
我的文件名很长,文件名的一部分是日期和版本号。通常,我想使用几乎相同的名称将文件保存在缓冲区中,只需更改版本号或日期即可。 如果我有一个命令将当前缓冲区的文件名放入kill环中,这样我可以打开一个文件,然后键入C-x C-w(写入文件),用Cy提取当前名称,将其更改并保存,这将容易得多。它。 我在Windows上使用Emacs 24.3,在Linux上使用24.4。由于各种原因,我必须使用不同的文件名而不是git。如果此命令与AUCTeX / LaTeX作为主要模式一起使用,我将感到高兴。 编辑1: 我犯了一个错误:我不想键入C-x C-f(=查找文件),但是C-x C-w({write文件)。我在上面纠正了这个问题。 编辑2: 找到了重复的问题和答案:https : //unix.stackexchange.com/a/45381但是没有更好的答案了! 编辑3: 此处:http ://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.html是一个函数,用于选择filname的“非目录”部分: 功能:文件名-非目录文件名 This function returns the nondirectory part of filename. (file-name-nondirectory "lewis/foo") ⇒ "foo" (file-name-nondirectory "foo") ⇒ "foo" (file-name-nondirectory "lewis/") ⇒ "" 如果我只知道口齿不清...
17 files 


1
如何将组织模式缓冲区的顶级标题导出到单独的文件?
如何将org-mode缓冲区的每个顶级标题导出到以相应CUSTOM_ID+(经过消毒)标题的值命名的单独文件? 假设一个缓冲区包含: * Title of Heading 1 :PROPERTIES: :CUSTOM_ID: fibrillogenesis :END: Suspendisse potenti. Mauris ac felis vel velit tristique imperdiet. ** Sub-Heading Nullam rutrum. * Another Title for Heading 2 :PROPERTIES: :CUSTOM_ID: mitochondrion :END: Mauris mollis tincidunt felis. Sed bibendum. 最终结果将是一个目录,其中包含两个文件,两个顶级标题中的每个标题一个,在导出时选择格式(HTML,LaTeX等),并具有以下文件名和内容: 第一个导出标题的文件名: fibrillogenesis-title-of-heading-1.[ext] 导出的内容,对应于原始的第一个顶级标题: * Title of Heading 1 :PROPERTIES: …

4
是否存在用于实时查看击键损失的模式?
C-h l显示损失帮助缓冲区,其中显示最近的击键。按g出现将其还原,使其更新。不幸的是,启用auto-revert-mode并不能将其更改为连续更新。 如果我可以打开另一个窗口或框架并实时显示损失以向查看者显示我正在输入的内容,那就太好了。这也可以用于tmux / tmate会话中的配对。一些在线视频具有类似的内容,但它们似乎是外部应用程序和特定于操作系统的。 在Emacs中实时发生击键时,是否存在一种很好的方法来实时显示击键?

2
如何在emacs中使用Markdown的SE风格?
我想在emacs中使用markdown的SE风格。默认的Markdown模式具有一些功能(反引号和缩进标记代码,#创建标头以及>更改字体),但我也想拥有: * 制作包括缩进在内的列表项。 [foo](http://example.com)显示为foo并http://example.com在单击时打开浏览器。 理想情况下,我希望在我的emacs中将其显示为Markdown。例如,如果我要写: ## Header * item 1 * item 2 while true; do echo foo; done End of list and more code while true; do echo bar; done See [here](http://example.com) for details 我希望在emacs本身中将其呈现为: 标头 项目1 项目2 while true; do echo foo; done 列表结尾和更多代码 while true; do echo …

1
将gc-cons-threshold设置得很高并在闲置时收集垃圾有任何不利之处吗?
我在我的顶部添加了以下两行init.el: (setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024))) (run-with-idle-timer 2 t (lambda () (garbage-collect))) 这意味着Emacs不会在闲置时(即当暂停不打扰我时)这样做,而不是每分配800KB的内存收集垃圾。(它还会在分配1GB内存后收集,但我认为不会发生这种情况)。 这将我的启动时间缩短了大约三分之二。从理论上讲,它还应该总体上提高性能。这种方法有不利之处吗?

2
如何防止flycheck将我的init.el视为软件包文件?
如果为我的init.el启用flycheck-mode,则出现以下几种错误: The first line should be of the form: ";;; package --- Summary" (emacs-lisp-checkdoc) ... The footer should be: (provide 'init)\n;;; init.el ends here (emacs-lisp-checkdoc) 如何停止flycheck将我的init.el视为软件包? 编辑 我试图遵循以下最小启动文件: ;; flycheck-mode (require 'flycheck) (global-flycheck-mode) (setq-default flycheck-disabled-checker '(emacs-lisp-checkdoc)) 仅启用flycheck及其依赖项。emacs-lisp-checkdoc在禁用的检查器列表中,但flycheck仍列出错误: 0 warning The first line should be of the form: ";;; package --- …
17 flycheck 


4
如何缩进对齐的关键字?
可能受Clojure影响,我更经常使用属性列表作为数据结构。Emacs大多数时候都这样缩进他们, `(:token ,token :token-quality ,quality) , 虽然这是我想要的 `(:token ,token :token-quality ,quality) . 所以,我想知道是否有人已经解决了这个问题?
17 elisp 


3
如何崩溃撤消历史?
我正在使用一种Emacs模式,该模式可以让您通过语音识别控制Emacs。我遇到的问题之一是Emacs处理撤消的方式与您期望通过语音进行控制时的工作方式不匹配。 当用户说出几个字然后停顿时,这被称为“话语”。话语可能包含多个命令,供Emacs执行。识别器经常会错误地识别出话语中的一个或多个命令。在这一点上,我希望能够说“撤消”,并使Emacs撤消所有由语音执行的动作,而不仅仅是语音中的最后一个动作。换句话说,我希望Emacs就撤消而言将一个发声视为一个命令,即使一个发声包含多个命令也是如此。我还想指出要回到发话之前的确切位置,我注意到普通的Emacs撤消操作不会这样做。 我已经设置了Emacs来在每个话语的开始和结束时获取回调,所以我可以检测到这种情况,我只需要弄清楚Emacs会做什么。理想情况下,我会打电话给类似的东西(undo-start-collapsing),然后(undo-stop-collapsing)将介于两者之间的所有内容神奇地折叠成一张唱片。 我在文档中进行了一些检索,发现了undo-boundary这一点,但这与我想要的相反-我需要将所有动作折叠成一个撤消记录,而不是拆分。我可以undo-boundary在发声之间使用,以确保插入被认为是分开的(默认情况下,Emacs将连续插入操作视为一个达到一定限制的操作),仅此而已。 其他并发症: 我的语音识别守护程序通过模拟X11按键来向Emacs发送一些命令,并通过emacsclient -e这样的方式发送一些命令,如果有人说(undo-collapse &rest ACTIONS)我没有可以包装的地方。 我使用undo-tree,不确定是否会使事情变得更复杂。理想情况下,解决方案将与undo-treeEmacs的正常撤消行为一起使用。 如果话语中的命令之一是“撤消”或“重做”怎么办?我想我可以更改回调逻辑,以始终将它们作为独特的发音发送给Emacs,以使事情变得更简单,然后应像使用键盘一样处理它。 延伸目标:语音可能包含用于切换当前活动窗口或缓冲区的命令。在这种情况下,最好在每个缓冲区中分别说一次“撤消”,我不需要那么花哨。但是,单个缓冲区中的所有命令仍应分组,因此,如果我说“ do-x do-y do-z switch-buffer do-a do-b do-c”,则x,y,z应该是一个撤消原始缓冲区中的记录,而a,b,c应该是切换到缓冲区中的一个记录。 是否有捷径可寻?AFAICT没有内置的功能,但Emacs广阔而深刻。 更新:我最终在下面使用了jhc的解决方案并添加了一些额外的代码。在全局中,before-change-hook我检查要更改的缓冲区是否在修改了此话语的全局缓冲区列表中,如果没有,它将进入列表并被undo-collapse-begin调用。然后,在发话结束时,我迭代列表中的所有缓冲区并调用undo-collapse-end。以下代码(为函数命名而在函数名称前添加md-): (defvar md-utterance-changed-buffers nil) (defvar-local md-collapse-undo-marker nil) (defun md-undo-collapse-begin (marker) "Mark the beginning of a collapsible undo block. This must be followed with a call to undo-collapse-end with a marker …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.