新人请教:doom emacs中vip的用法跟vim中的区别

问题不确定是否跟doom有关,先放doom标签了。

如下示例:

光标移动到下面表格的 a 处时,输入 =vip=

| a | b |
| c | d |

#+begin_src emacs-lisp
(+ 2 3)
#+end_src

在doom里如上图,但是在vim里如下图。

【图片已删除,新人只能添加一张图片,效果是只选中table不分。】

这个差异导致文本超过一屏时,看不到选择的文本范围,如果想当然认为选中的只有表格,在使用 :'<,'>! 操作文本时,就会出现意外情况。而且有时不好发现。

对evil源码不太熟,翻了一下看起来底层实现依赖forward-paragraph。

我的疑问是,为什么evil的默认操作跟vim如此之大,是否有补救的办法?

跟doom无关,原生evil的行为即使如此

找到问题根因了。

原因是 evilvip 底层使用了 forward-line,forward-line 依赖 paragraph-startparagraph-seperate 配置。而在 org.el 中,对 org-mode 的 buffer,对这两个变量做了改写。

改写后的行为是基于 org element 的,表现上比较奇怪,感觉用处不大。

我这里的做法,先把两个变量重置回原始值了。

(after! org
  (defadvice! recover-paragraph-seperate ()
    "Recover org paragraph mark position."
    :after 'org-setup-filling
    (setq-local paragraph-start "[\f\\|[ \t]*$]")
    (setq-local paragraph-separate "[ \t\f]*$")))
1 个赞