awesome-pair.el 更加智能的括号自动补全插件

我一会加一个语言的限制吧.

现在只在Lisp语言中会自动提取右括号到当前行位, 其他语言知识调到右括号外并换行

好的,非常感谢!刚才我已经下载试过了,很好用。

关于M-) 46

操作之后 11

format太lisp风格了,可不可以方便的时候,把c系的语言的这个format去掉。上图是Rust

github提issue,最近忙,放论坛忘记了

已经提issue了

Just indent parent expression after unwrap pair when in lisp like lan… · manateelazycat/awesome-pair@fa03531 · GitHub 已经修复了.

太感谢了! ありがとうございます!

我刚才也试过了,非常好用。以后我也试着提一些PR :blush:

欢迎欢迎,哈哈哈哈

刚才又发现一个问题,不清楚是我的环境问题还是哪里冲突了,就没提issue

我的F6键绑定的是neotree-toggle

窗体模式打开emacs, 按F6是正常的。但在终端模式打开emacs, F6却被绑定到swesome-pair-wrap-bracket上了。

再现手顺

C-h-k 23 F6 19

上面也提示swesome-pair-wrap-bracket是绑定到M-[

看不明白是怎么回事了。可能是哪方面的问题呢?能给个提示吗?

在终端F6被翻译成C-[了,应该是你终端的设置问题

刚我又确认了一下,不是终端的问题。我把F6和F7对调了一下,F6没问题了,F7出现相同的问题了。

另外发现在终端环境下,只有和awesome-pair相关的mode才会出这问题,打开别的文件,比如README.md就没这个问题。

不知大家能否在自己的环境中再现这种现象不?

再现手顺:

  1. F键(如F6)绑定到neotree-toggle
  2. 在终端环境下打开emacs
  3. 在和awosome-pair相关的mode下按F6,比如lisp-mode下

注意:上面的问题只出现在终端下

如果大家也能再现的话,我就提issue了

我想问一下,paredit里有快速把括号左边或右边的元素包含进括号内的功能,awesome-pair里,我没找到,是不是因为不常用,所以没有提供?

这功能就叫slurp… 楼上说了为啥没搞

好的,我刚才爬楼看到了

关于awesome-pair-jump-*系列的命令,使用过之后有些想法拿出来讨论一下:先看下面的GIF Peek%202019-01-25%2020-15

当中所有移动都是使用awesome-pair-jump-right (我绑定到了M-n),可以发现中间跳转到了?a左边的左括号上,原因应该是awesome-pair-jump-*系列的函数可以跳转到单引号上头(jump-right会跳到单引号后面,jump-left会直接跳到单引号上面),所以当awesome-pair-jump-right寻找下一个目标的时候发现了单引号,所以就跳到他后面

这在lisp一类的语言里用起来有时候很尴尬,因为常常

(quote ...)

会被简写成

'(...)

会导致awesome-pair在跳转的时候就跳到了左括号上,可是awesome-pair-jump-right理论上应该是设计的要在右括号,右方括号,右花括号之间跳转,这样用起来感觉就不是很一致,我暂时也没想到会有想要跳到单引号上头的场合

而如果是在非lisp一类的语言中,单引号通常是用来表示字元(当然也可能表示字串,可能相对少一点),使用场景可能会变成这样(|表示光标位置)

|'a' ==> 'a'|

感觉用处就不是很大,双引号常用来代表字串而在字串边界跳转是很实用的,但是单引号比较常用来表示字元,在字元边界跳转感觉用处不是很大?

综上所述,个人感觉让awesome-pair-jump-*系列的命令不要跳到单引号上可能可以增加一致性,也可以省去很多不太必要的跳转过程

当然以上都只是我个人的使用经验,可能这在很多情况下会是很好的feature,在这边抛砖引玉发表点自己的看法

单引号在写c或者python的时候,用处特别大。

其实严格意义上的对称跳转并不好用,徒增不必要的跳转。

当然欢迎大家一起探索每种语言最佳跳转逻辑,awesome-pair.el本身就是为了适应所有编程语言去设计的。

1 个赞

感谢说明

话说awesome-pair的github说明里是用

(define-key awesome-pair-mode-map (kbd "M-p") 'awesome-pair-jump-right)
(define-key awesome-pair-mode-map (kbd "M-n") 'awesome-pair-jump-left)

虽然按键完全是可以自己配置的,不过依照emacs的传统把这两个倒过来感觉会直觉一些? ? 像是emacs内建的C-M-n (forward-list)跟awesome-pair-jump-right就有点像,感觉用n代表right,p代表left会更直觉一些,要不要考虑把说明里的这两行换过来?

另外个人有个比较好奇的问题是楼主平常向后删除是用M-o (awesome-pair-backward-delete)还是会用backspace ? 推荐直接用awesome-pair-backward-delete完全取代backspace吗? e.g.

(define-key awesome-pair-mode-map (kbd "<backspace>") 'awesome-pair-backward-delete) 

只是配对的pair跳转,不包括paredit那些的话,陈斌的evil-matchit算是比较不错的,能跳python的if-else这种,可以参考一下,当然它依赖evil

我是按照键盘布局来记忆的, 因为 N 在靠左的位置, P在靠右的位置, 所以 M-n 代表 awesome-pair-jump-left M-p 代表 awesome-pair-jump-right

我 99% 的情况都用 awesome-pair-backward-delete 进行语法删除, 但是不建议完全用 awesome-pair-backward-delete 绑定到 backspace 上, 因为像Elisp这样语言, 一旦语法结构发生错误, awesome-pair-backward-delete 这个函数会发生非常诡异的删除行为 (因为 awesome-pair-backward-delete 是建立在正确语法基础之上进行语法推测并进行删除的, 语法结构都错了, 结果就不可预料了)

所以, 推荐 backspace 按键不要绑定 awesome-pair-backward-delete, 以备不时之需.

1 个赞