Emacs

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

2
我可以在组织模式下将公共代码块包含在两个不同的代码块中吗?
我有一个org-mode包含数据表和两个Python代码块的文件,用于从中提取不同的摘要。 我想在这两个代码块之间共享一些公共常量和函数。理想情况下,我可以通过将通用代码分解为一个单独的代码块来进行此操作,只要对其他两个块中的任何一个进行评估,该代码块都会自动包含并对其进行评估。用伪造的语法,它看起来类似于以下内容: #+NAME: init_block #+BEGIN_SRC python ... common constants and functions here ... #+END_SRC #+NAME: summary_1 #+BEGIN_SRC python :prepend init_block ... data-processing code depending on init code goes here ... #+END_SRC #+NAME: summary_2 #+BEGIN_SRC python :prepend init_block ... more processing which also depends on init code ... #+END_SRC 我想我可以使用该:session选项,但是由于两个原因,我不愿意使用该选项。首先,它建立了一个有状态的系统,而不是每次我C-c C-c在代码块上使用时都会从头开始运行的系统。其次,与此相关的是,我现在必须记住每次打开文件时都要手动评估通用的初始化代码:我不能只是更新数据表,转到摘要块之一并单击C-c …

5
最近以ido-mode打开的文件
我使用了ido-mode,但是我讨厌的一件事是,在C-x C-f我无法使用up/down键来循环浏览最近打开的文件之后,就像以前那样iswitchb。如何设置ido这种方式?
12 ido  find-file  cycling 

3
删除帧时杀死缓冲区
当我关闭框架时,我希望它的缓冲区被杀死。 如果缓冲区显示在其他框架中,则不应终止该缓冲区。 如果在一帧中显示多个缓冲区,则不执行任何操作。 进行此设置的好方法是什么?
12 buffers  frames 

2
提供外部程序和软件包的正确方法?
我维护了许多elisp软件包(例如codesearch,emacs-ycmd,traad),这些软件包将从能够安装它们使用的外部程序中受益,从而节省了一些用户的时间和精力。例如,使用codesearch.el能够为用户下载,编译和安装codesearch工具(用go编写,而不是elisp编写)会很好。这将消除使用包装的至少一个障碍。 是否有“最佳做法”来做到这一点?例如,我应该将外部程序放在哪里? 如果您没有任何直接的建议,能否将我推荐给做类似事情的软件包(最好是做得很好)?

2
如何处理键盘宏中的下一行?
我创建了一个键盘宏来使用以下命令将缓冲区中的行连接起来: F3 C-n M-x join-line RET F4。 它行之有效,除非行太长并开始换行,这使此宏取决于帧的宽度。next-line似乎并没有转到下一个实际行,而是到了当前行的“包装”部分。 如何解决这个问题?

2
将模式行和迷你缓冲区移到顶部
有什么方法可以将模式行和迷你缓冲区从屏幕的底部移到顶部? 上一个问题涵盖了迷你缓冲区。如何在emacs帧的中间显示迷你缓冲区的内容?,所以这个问题主要是关于模式行。 我刚放下笔记本电脑并弄碎了屏幕,因此在底行看不到太多东西。

3
防止组织模式吞入文件本地变量
有时使用注释(例如,必须在文件末尾)定义文件局部变量会很方便。 # Local Variables: # fill-column: 80 # End: 但是,在组织模式缓冲区中,此注释被认为位于最后一个标题的“内部”。例如,在下面的缓冲区中,每当子树C或隐藏时,注释将被B隐藏。 * A * B ** C # Local Variables: # fill-column: 80 # End: 我真的不介意这种隐藏。 真正的问题是,每当我将C子树移动到其他位置时,注释就会随身携带。 举例来说,如果我叫org-refile上C,或者如果我移动它周围的org-metaup(和喜欢),该意见与树一起移动,然后他们显然将停止工作。 有没有办法告诉org-mode你停止这样做?

2
如何强制特定缓冲区在新窗口中打开?
在Magit中提交更改时,打开diff视图并添加有关提交的详细信息很有用。 在Magit中,我们看到*magit ..*缓冲区中的差异。当你打cc,而光标在上演文件时,Magit提交缓冲.. COMMIT_EDITMSG弹起。默认情况下,此新缓冲区将替换*magit ..*显示提交差异的缓冲区。 问题- 如何使.. COMMIT_EDITMSG缓冲区在新窗口中打开(如果框架仅以1个窗口开头,请重用其他窗口或创建新窗口),以便我能同时看到*magit ..*和.. COMMIT_EDITMSG缓冲区?
12 buffers  window  magit 

1
从eshell中在远程主机上的cwd中运行应用程序
我经常使用Eshell连接到远程系统。在那些远程系统上,有时我想在当前工作目录中运行脚本。在常规终端中,我将输入: ./my-script.sh 不幸的是,在Eshell中这是行不通的: ~ $ cd /remote1:~ /ssh:remote1:/home/rekado $ ./my-script.sh env: /ssh:remote1:/home/rekado/my-script.sh: No such file or directory /ssh:remote1:/home/rekado $ 仅当我提供脚本的完整TRAMP路径时,它才有效: /ssh:remote1:/home/rekado $ /ssh:remote1:/home/rekado/my-script.sh It works! /ssh:remote1:/home/rekado $ 有没有办法说服Eshell .自动扩展以便更简单的调用起作用? 作为一种解决方法,我目前使用绑定到C-c .该函数的函数在命令行上插入当前的完整路径。我更希望.表现得像预期的那样。
12 tramp  eshell 

3
在编模式下将符号视为单词
Emacs中有许多命令适用于“单词”。实例包括forward-word,kill-word,upcase-word,mark-word,transpose-words,等。“字”的定义似乎改变命令之间的位。例如,forward-word将在单词(例如foo_bar)内的下划线处停止,但mark-word不会在下划线处停止。 当我处于编模式时,是否可以更改“单词”的定义,以便Emacs将适当的单词边界用于当前语言的语法? 当我进入时,c-mode我想forward-word跳过下划线,当我进入时,lisp-mode我想forward-word跳过连字符和下划线,等等。

2
“ syntax-ppss”适合什么语言?
我一直在寻找一种方法,通过查看当前缓冲区的字体设置来检测注释上是否存在点。 Smartparens定义sp-point-in-comment依赖于syntax-ppss。然而,似乎syntax-ppss和parse-partial-sexp可用于任意语言,即使他们不使用s表达式。 例如,以下Python: x = 1 # I'm a comment y = 2 将点放在评论和评估中(if (nth 4 (syntax-ppss)) 'comment 'not-comment)可以正常工作。 是否syntax-ppss适用于任何编程模式?为什么文档字符串讨论s表达式?

7
如何在Emacs中交互地练习搜索和替换正则表达式?
对于可以例行执行这些操作的Emacs用户而言,使用正则表达式进行搜索和替换显然是一个功能强大的工具。但是,作为Emacs(和/或编程)的初学者,需要学习和练习正则表达式。 与内置的Emacs教程类似,我可以在Emacs中以交互方式学习和训练正则表达式吗?如果没有,还有什么其他建议可以利用Emacs来练习使用正则表达式进行搜索和替换?

1
如何检测是否在LaTeX数学环境中?
问:有没有一种方法可以检测点是否在LaTeX数学环境中? 如何将一个检测点是否是或不是一个LaTeX的数学环境中,无论是通过在线划定$...$或名为环境(equation,displaymath,等)?
12 latex  auctex 

2
有哪些带有不错源代码的内置软件包?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我试图熟悉Emacs Lisp,其语法,数据结构等,所以我想知道有哪些内置软件包,其来源可以帮助我更好地了解如何使用该语言并学习其习语?

1
异步等待comint进程的输出
首先,免责声明。我已经研究了很多次,我很确定自己已经以一种或另一种方式找到了答案,但我只是不理解。 我的问题如下: 我有一个通过comint运行的进程 我想发送一行输入,捕获输出并查看结束时间(当输出的最后一行与提示的regexp匹配时) 仅当进程完成输出发送后,我才想发送另一行输入(例如)。 作为一点背景知识,请考虑实现与程序交互的主要模式,该模式可能会在任意长时间内返回任意数量的输出。这不应该是异常情况,对吗?好的,也许我需要在 输入之间等待的部分是不寻常的,但是与整体发送输入相比,它具有一些优势: 输出缓冲区的格式很好:输入输出输入输出... 更重要的是,当向流程发送大量文本时,该文本被切成小块,并被该流程粘贴回去;切割点是任意的,这有时会导致无效输入(例如,我的过程不会正确地将输入切割剪切回粘贴到标识符中间) 无论如何,无论是否异常,事实证明它都很复杂。现在,我正在使用类似 (defun mymode--wait-for-output () (let ((buffer (mymode-get-buffer))) (with-current-buffer buffer (goto-char (point-max)) (forward-line 0) (while (not (mymode-looking-at-prompt)) (accept-process-output nil 0.001) (redisplay) (goto-char (point-max)) (forward-line 0)) (end-of-line)))) 在每次发送输入行之后以及发送下一行之前,我每次都会调用此命令。好吧...它起作用了,已经存在了。 但这也会使emacs在等待输出时挂起。原因很明显,而且我发现如果sleep-for在循环中包含某种异步(例如1s),它将使输出延迟1s,但可以抑制挂起。除了似乎这种异步 sleep-for 不存在。 还是呢?更笼统地说,是否有使用emacs实现此目的的惯用方式?换一种说法: 如何将输入发送到进程,等待输出,然后异步发送更多输入? 在四处搜寻时(请参阅相关问题),我主要看到提到前哨(但我认为这不适用于我的情况,因为该过程尚未完成)和一些复杂的钩子(但是那又该怎么办?使该钩子在局部缓冲,将我的“评估剩余的行”转换为一个函数,将该函数添加到该钩子中,然后再清理该钩子?这听起来确实很脏,不是吗?)。 很抱歉,如果我自己说不清楚,或者某个地方确实有一个明显的答案,那么我将对流程交互的所有复杂性感到困惑。 如果需要,我可以将其全部作为一个可行的示例,但恐怕它只会像我之前发现的所有对我没有帮助的问题一样,使另外一个“具有特定过程答案的特定过程问题”。 关于SO的一些相关问题: /programming//q/16815598/1083706 /programming//q/3572532/1083706 /programming//q/6578373/1083706

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.