编辑弯的代码块
;; The following code extract the "hello" from the comment:
;; ,----
;; | (parsec-with-input "/* hello */"
;; | (parsec-string "/*")
;; | (parsec-many-till-as-string (parsec-any-ch)
;; | (parsec-try
;; | (parsec-string "*/"))))
;; `----
缩进会偏差:
;; The following code extract the "hello" from the comment:
;; ,----
;; | (parsec-with-input "/* hello */"
;; | (parsec-string "/*")xxx
;; | (parsec-many-till-as-string (parsec-any-ch)
;; | (parsec-try
;; | (parsec-string "*/"))))
;; `----
通常,在代码块的上面按一下就直接进入代码的编辑。
你的例子当中 ;;
和 ,----
之间超过一个空格,目前的正则表达式没匹配到。所以你是整个comment 进入一个 fundamental-mode,然后才进入代码块的编辑。提交的时候的时候由于 fundamental 没有注释符号可以补全,所以空给被吃掉了,出现缩进问题。
有两种临时解决方案:
- 删除多余的空格
- 给
separedit--comment-delimiter-regexp
加个 advice
使原本只能匹配一个空格:
(separedit--comment-delimiter-regexp 'emacs-lisp-mode)
;; => "^ *\\(?:;+\\) ?"
变成不限个数:
(separedit--comment-delimiter-regexp 'emacs-lisp-mode)
;; => "^ *\\(?:;+\\) ? *"
我稍后看看如果改成匹配无限多空格,会不会误中其他目标。
1 个赞
最近积累了不少更新,包括:
- 合并#62 楼提到的
help-mode
的支持
- 添加了
helpful-mode
的支持
- 修复了#66 @xuchunyang 提到的空格问题
- 修复了进入编辑/提交返回之后光标位置不固定的问题
现在文档落后太多,得抽空补上了。
刚才无意间在 minibuffer 按le 一下 C-c '
发现竟然对字符串有效,刚觉可以再完善一下,实现对整个 minibuffer 的支持。再也不怕在 minibuffer 写大段内容了:
1 个赞
目前separedit
直接调用了edit-indirect
。能不能提供一个接口函数?有了这个函数我就可以用separedit自动做一些事,比如fill注释。c-mode的c-fill-paragraph太复杂了,和eglot一起用有问题还改不了。
比如说,(separedit-with #'fill-paragraph)
会去掉注释的//
然后运行fill-paragraph
,然后再加回//
,保存到buffer里。
这样应该可以:
(defun separedit-fill ()
(interactive)
(let ((separedit-continue-fill-column t))
(with-current-buffer (separedit)
(fill-region (point-min) (point-max))
(execute-kbd-macro (kbd "C-c C-k")))))
UPDATE:
- (execute-kbd-macro (kbd "C-c C-c")))))
+ (execute-kbd-macro (kbd "C-c C-k")))))
1 个赞
- 完善对 minibuffer 的支持
- 支持直接在 edit buffer 中按
C-x C-s
保存修改
- 修复了一些问题
顺便在 github 上搜了一下,发现大佬 jwiegley 也用这个包了:
5 个赞
wsw
74
设置sepraedit-default-mode为text-mode时,进入separedit的buffer时,没有”标题栏”,且C-c C-k退出时,总是有个warning的buffer出现,提示”Unknown major-mode: text-mode“。
设置为markdown-mode或默认fund-mode都很正常。
Youmu
75
此外还发现了一个问题,当 .dir-locals.el
里存在设置 fill-column
为 100 时,进入 separedit
的 fill-column
不是当前 buffer 的 fill-column
100 - 当前 comment 前缀,而是 80 - 当前 comment 前缀。这里的 80 是我设置的默认 fill-column
的值
应该是 local variable 的问题。编辑窗口 buffer 不属于当前 dir,无法继承 local variable 的值。明天再看了,得先把测试用例写出来。
wsw
77
提了个pr,允许用text-mode。@twlz0ne
感谢。但是这个需求我昨天已经改好了,并且不是加一行那么简单,稍后从我提交的修改和测试中可以看到。
@Youmu @wsw 最新的代码已经推送到仓库了。
1 个赞
@twlz0ne 请教下,这个插件怎么切换注释的符号呢?比如 Rust 里面的注释符号有 ///
, //!
, //
这三种,含义还不太一样。
PS:目前我是手动改的 comment-start ,但是这样整个 buffer 就都改了。
展示方式不一样,比如 ///
会作为函数的 doc 在鼠标 hover 时展示,而 //
就是一般的注释了,对编辑感觉没啥影响。可以参考:
你的意思是用 separedit 把代码中的 //
改成 ///
?
编辑之前 -> 编辑之后
// commen /// commen
暂时不具备这项功能。不过你可以在编辑窗口中修改本地变量 separedit--line-delimiter
,把它从 //
改成 ///
。