我自己挖一下坟。
正在实现 multible string 功能(issue#38),不是 multi-line string 一个字符串包含多行,而是把个多个连续(无论直排/横排)的单行字符串聚集起来编辑:
对于某些语言或场景需要经常拼接字符串有帮助。
现在比较纠结的是,如何触发这个动作。
- 光标位于在字符串之外时触发。
["foo" C-c ' foo
|"bar" ----> b|ar
"quxx"] quux
- 光标位于在字符串之中时触发。但有时我有可能又只想编辑单个字符串,这就有冲突了。
["foo" C-c ' foo
"b|ar" ----> b|ar
"quxx"] quux
代码暂时放在分支 feat-multi-string-block
3 个赞
很棒的包 ,之前一直想找 emacs 中实现类似 jetbrian idea Language injections 的方案。
我配合 GitHub - andreasjansson/language-detection.el: Automatic programming language detection of code snippets, in Emacs Lisp, 可以大概自动识别字符串中的语言
(use-package separedit
:ensure t
:demand t
:config
(add-to-list 'separedit-string-quotes-alist
'(ruby-mode "\"\"\"" "'''" "\"" "'" "`"))
:init
(defun bind-separedit-key()
(local-set-key (kbd "C-c '") #'separedit))
(add-hook 'prog-mode-hook 'bind-separedit-key))
(use-package language-detection
:ensure t
:demand t
:init
(defun my-separedit-guass-mode()
"Guass buffer's code language using `language-detection-buffer'.
And then switch to prefer mode."
(when (derived-mode-p 'separedit-single-quote-string-mode
'separedit-double-quote-string-mode)
(let* ((language (language-detection-buffer))
(mode (intern (concat (symbol-name language) "-mode")))
(header-line-format-back header-line-format))
(if (fboundp mode)
(progn
(funcall mode)
(setq-local header-line-format header-line-format-back))))))
(add-hook 'separedit-buffer-creation-hook 'my-separedit-guass-mode))```
美中不足的是目前还没有支持 “" 的识别,例如 ruby 中 "
” 是直接调用 shell 的,可以考虑加一个 'separedit-back-quote-string-mode,在这个 mode 中默认打开 shell-script-mode.
等有空看看能不能搞个 pr 出来支持
2 个赞