遇到一些长句子不希望按照字符数而总是按特定的字符折行,比如:
aaaaaaaaaa + bbbbbbbbbb + ccccccccccc + dddddddd
,希望显示成
aaaaaaaaaa +
bbbbbbbbbb +
ccccccccccc +
dddddddd
或
aaaaaaaaaa
+ bbbbbbbbbb
+ ccccccccccc
+ dddddddd
缩进可以不要,但我希望能从特定的符号(比如+
)折行,最好是visual-line-mode
。
找到一个工具wrap-region,但是似乎跟我的需求正好相反,这个是设定不折行的字符。
有其他推荐吗?谢谢!
仿佛看到了ggplot
我一般直接 :s/+/\n+/g
了
不知道有没有自动折的
差点忘了自己之前在网上抄到的code。。来源和最新版本似乎在这儿
是用Yihui Xie的formatR
来做自动formatting 理论上和rstuidio的效果应该相同
;;;; ESS
(with-eval-after-load 'ess
(defun ess-indent-region-with-formatR-tidy-source (beg end)
"Format region of code R using formatR::tidy_source()."
(interactive "r")
(let ((string
(replace-regexp-in-string
"\"" "\\\\\\&"
(replace-regexp-in-string ;; how to avoid this double matching?
"\\\\\"" "\\\\\\&"
(buffer-substring-no-properties beg end))))
(buf (get-buffer-create "*ess-command-output*")))
(ess-force-buffer-current "Process to load into:")
(ess-command
(format
"local({
formatR::tidy_source(text=\"\n%s\",
arrow=TRUE, width.cutoff=60) })\n"
string) buf)
(with-current-buffer buf
(goto-char (point-max))
;; (skip-chars-backward "\n")
(let ((end (point)))
(goto-char (point-min))
(goto-char (1+ (point-at-eol)))
(setq string (buffer-substring-no-properties (point) end))
))
(delete-region beg end)
(insert string)
(delete-backward-char 2)
))
)
1 个赞
我想的就是R
不过平时中文折行效果也不好……
我的Rscript一直eval不了region或函数,也没排查出是Doom的问题还是ESS的,运行单行是可以的,但每次一行既麻烦console里又不整齐,所以想能折行显示就好了。
不知道这个思路是不是跑太偏了……
有啥报错信息吗
是不是没设置binding?发送单行和函数和region是不同的command
ess-eval-line
ess-eval-buffer
ess-eval-region
ess-eval-function
ess-eval-paragraph
ess-eval-line-and-go
ess-eval-buffer-and-go
ess-eval-line-and-step
ess-eval-region-and-go
ess-eval-function-and-go
ess-eval-paragraph-and-go
ess-eval-paragraph-and-step
ess-eval-function-or-paragraph
ess-eval-line-visibly-and-step
ess-eval-buffer-from-beg-to-here
ess-eval-buffer-from-here-to-end
ess-eval-line-and-step-invisibly
ess-eval-line-invisibly-and-step
ess-eval-region-or-line-and-step
ess-eval-function-or-paragraph-and-step
ess-eval-region-or-function-or-paragraph
ess-eval-region-or-line-visibly-and-step
ess-eval-region-or-function-or-paragraph-and-step
没啥,就是有跟region有关的,准确说是只要有换行的region或{}包围的内有换行的函数,就会卡住。一次一行就没问题。这两天在折腾怎么在打开script时关连一个process,这个还没详细测试。
楼主找到更好的解决方案了吗?我目前也有这个需求。
研究过程中,发现lua-mode 对单个符号的实现就是你需要的效果。
下图是自动缩进后的效果:
没有按照我原来的思路实现。
后来用了format-all
搭配老王的auto-save
等,也算是基本解决了。
这是我写R的一些配置,不知道你能不能用得上,供参考:
https://gitee.com/hesperus/emacs.d/blob/master/config/+ESS.el#L47
感谢分享,我好好研究一下。
更新: 基于basic-mode 的缩进算法实现,进行稍微扩展已经解决这个问题。后缀加什么符号都可以,我用的是行尾遇到“\” 自动折行。
实现方法:
- 如果往前搜索到关键字(”\“),并且往后搜索到上一行的行尾没找到关键字。折行时增加缩进。
- 如果往前搜索到关键字(”\“),并且往后搜索到上一行的行尾没找到关键字。折行时减少缩进。
- 其他情况 不做操作。