分享智能的 paredit-kill 函数

我大部分模式都会用paredit,自动加空格是你其他模式影响的,paredit没有这个问题

请用emacs -Q单独测试paredit来排除其他插件的问题。

确实是 paredit 引起的

我这里包的版本是 25beta 20171127.205 来自 melpa

edit:发现了一个叫 paredit-everwhere 的包用于非lisp buffer

假的paredit 吧,我从来不用melpa

直接从作者官网下载吧,emacs大多数插件都是单文件,非要搞一个melpa,真麻烦

1 个赞

我的 paredit 的版本也是 20171127.205 来自 melpa 也没有自动加空格,估计真的是其他插件或者配置的影响

打算试试 paredit-extension,所以把包的依赖关系整理了一下,尽量找到原始下载地址不知道对不对:

paredit-extension                   "https://www.emacswiki.org/emacs/download/paredit-extension.el"
  \-> lazycat-toolkit               "https://www.emacswiki.org/emacs/download/lazycat-toolkit.el"
        |-> color-moccur            "https://www.emacswiki.org/emacs/download/color-moccur.el"
        |-> shell-command-extension "https://www.emacswiki.org/emacs/download/shell-command-extension.el"
        |-> mwe-log-commands        "http://www.foldr.org/~michaelw/emacs/mwe-log-commands.el"
        \-> basic-toolkit           "https://www.emacswiki.org/emacs/download/basic-toolkit.el"
              |-> cycle-buffer      "https://www.emacswiki.org/emacs/download/cycle-buffer.el"
              |-> css-sort-buffer   "https://www.emacswiki.org/emacs/download/css-sort-buffer.el"
              \-> windows           "http://www.gentei.org/~yuuji/software/windows.el"
                    \-> revive      "http://www.gentei.org/~yuuji/software/revive.el"

(我的配置是这样的: (foo :requires (bar (qux :source (git "https://~/qux.git")))),显式地声明依赖关系,避免因为初始化语句书写顺序产生问题,我还可以单独启用某个 “layer”,它本身包含了完整的依赖关系,不必关心它依赖的 package 在其他 layer 里没有加载)

1 个赞

已经解决了

`paredit-web-mode-kill' support rails template now. · manateelazycat/lazycat-emacs@463eed9 · GitHub 这个补丁支持 rails 模板.

比如在 <% … %> 的代码中, 会删除到 %> 之前

论坛程序更新后, 之前的文章都没法编辑内容了, 想看这个函数最新的内容, 可以看: 智能的语法删除函数, 增强 web-mode, ruby-mode - 简书

大部分都从我 lazycat-emacs git 仓库中去找吧,emacswiki虽然我也会同步更新,但是怕有时候会忘记更新

感觉, 我从来没觉得 paredit 好用, 之前在 emacs lisp 下面, 也开启这个模式好久, 也用了好长一阵子 paredit-splice-sexp, 但是终究感觉没啥用, 彻底移除了.

无论哪个模式, 我都是通过 mode 内置的 mark-sexp 函数, 首先标记, 然后删除, 也没啥不方便的

请问您是如何在python-mode里进行语义删除呢?感觉没有js里那么方便,在function关键字前kill可以kill掉整个function

原来用 paredit和 autopair,后来转向 smartparens 用了很长时间,lispy 只试用过。功能上 smartparens 是最强大的,paredit是开创者但是最弱,autopair 开箱即用功能稍强,lispy 只针对 lisp 语言。

现在我全部都移除了,直接使用内置的 elec-pairs,觉得够用了。没人使用C-M-k C-M-b C-M-f之类的快捷键吗?

(electric-pair-mode 1)
(setq electric-pair-inhibit-predicate 'electric-pair-conservative-inhibit))
1 个赞

您可以讲解一下sp的优势吗?

你可以参考 GitHub - Fuco1/smartparens: Minor mode for Emacs that deals with parens pairs and tries to be smart about it. 。简单的说就是sp 包含了类似的package 的几乎所有特性,并且可以用于所有编程语言。功能强大,当然代价就是要更多的配置和资源。

Smartparens aims to provide a superset of these features, in all programming languages.。

http://ebzzry.io/en/emacs-pairs/ 这篇文章很好的介绍了 sp。还有一些技巧在 wiki 上 Home · Fuco1/smartparens Wiki · GitHub 。作者在 YouTube 上也有很好的介绍视频 https://www.youtube.com/watch?v=ykjRUr7FgoI

从24.4内置的elec-pair-mode很好的继承了autopair的功能,这也是为什么autopair作者不再继续维护并推荐使用elec-pair-mode的原因。参考 GitHub - joaotavora/autopair: Automagically pair braces and quotes in emacs like TextMate

electric-pair-mode is a minor mode in Emacs 24.3, but it’s not very useful or widely used. In Emacs 24.4, electric-pair-mode minor-mode is much improved and actually supersedes autopair in functionality and general all-around Emacs integration, and I recommend you use it instead.

经过使用比较后,个人倾向于轻量级的内置的elec-pair-mode,足够平时使用了。

3 个赞

我绑定到了C-M-9C-M-0(就是C-M-(C-M-)

elec-pair 的功能太弱了, 在字符串和注释里面都会自动插入补全括号.

配置下electric-pair-text-syntax-table?

1 个赞

没用过 python-mode, 不过用过类似的 mode, 好像的确不那么爽了, 你可以调研下, 特定的 mode 有没有提供一个专用的函数, 来解决这个问题.

这三个键我用烂了 … , 现在和你一样, 在用内置的 electric-pair-mode, 挺好的.

我自己还加了一些可以匹配的字符对儿. (针对 ruby-mode)

(add-to-list 'electric-pair-text-pairs '(?` . ?'))  ;;; 匹配 ` 和 '
(add-to-list 'electric-pair-text-pairs '(?( . ?))) ;;; 匹配中文括号

我没有添加任何字符,似乎默认就支持啊,包括中文的【】()《》。`’ 只在 lisp 注释和字符串中有效。 参考electric-pair-text-syntax-table.