首页 > 解决方案 > emacs ess-indent-or-complete 将换行符发送到 R 进程

问题描述

有时,由于我无法确定的原因,ess-indent-or-complete将输入发送到R控制台。换句话说,我将输入一些内容,点击选项卡以自动完成(或company自动完成),并且该R过程将使用换行符更新(.R左侧“缓冲区”中的文件,R右侧的过程):

x <- mea█                        | >
                                 |
                                 |

...然后我点击标签完成“ mean”:

x <- mean█                       | >
                                 | > ## note the new line here
                                 |

这可能真的很烦人,至少有两个原因:

  1. 它用空行填充进程缓冲区。
  2. 如果我使用 a browser(),它会推进通常不受欢迎的行。

我试图自己诊断,但无济于事。每次重新启动 emacs 都会修复它,但它似乎在一天中开始随机发生。一旦启动它就不会停止,直到 emacs 重新启动。

我正在运行emacs 27.1ess-20210818.843(尽管这已经存在很长时间了,所以我不相信它是特定于版本的),并且在ESS[R] mode.


2022-03-01 更新:

我仍在努力解决这个问题。我可以确定的功能链如下所示:

  1. <TAB>来电(ess-indent-or-complete)
  2. (completion-at-point)如果事物已经缩进,这会调用。
  3. 这引用了变量completion-at-point-functions
  4. 这个变量的最后一个条目是(ess-r-object-completion),它被使用。
  5. 这调用(ess-r-get-rcompletions).
  6. 这调用(ess-get-words-from-vector).
  7. 这调用(ess-command).

一旦在特定会话中开始发生,M-: (ess-command "")从我的文件缓冲区调用会复制不良行为。.R除此之外,我没有任何见解。

标签: remacsess

解决方案


推荐阅读