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


#42

我经过很多年的探索, 发现最好用的左右跳转, 就是简单像下面的方式进行正则表达式搜索:

(defun awesome-pair-jump-left ()
  "To left of previous match parentheses."
  (interactive)
  (cond
   ;; Jump out of string if cursor in string area.
   ((awesome-pair-in-string-p)
    (goto-char (car (awesome-pair-string-start+end-points))))
   ;; Jump to previous pair.
   (t
    (backward-char 1)
    (while (not (looking-at "\\(['\"<({]\\|[[]\\)")) (backward-char 1)))))

(defun awesome-pair-jump-right ()
  "To right of next match parentheses."
  (interactive)
  (cond
   ;; Jump out of string if cursor in string area.
   ((awesome-pair-in-string-p)
    (goto-char (+ (cdr (awesome-pair-string-start+end-points)) 1)))
   ;; Jump to next pair.
   (t
    (while (not (looking-at "\\(['\">)}]\\|]\\)")) (forward-char 1))
    (forward-char 1))))

因为当我们要进行这种跳转的时候, 大部分情况是想编辑括号或者字符串的内容, 这种基于正则表达式的跳转, 一般在最多5次之内的跳转配合光标移动即可快速抵到指定位置.

这种正则表达式的左右跳转看似实现方法比较简单粗暴, 但是这种跳转确实 “脑负担” 最小的一种跳转方式, 因为手指头快速动几下的速度要远远高于脑袋去思考的速度.

这也是我用了很多语法树跳转或者 ace-jump 类似的插件以后, 依然选择用这种最简单的跳转方式, 因为这些看似实现智能的插件, 当你真正想跳转的时候, 还会花一部分精力去想怎么跳转, 这样做有时候会占用你宝贵的脑部堆栈, 从而打断你对复杂逻辑状态的追踪.

所以, 我这么多年的插件奉行一个原则:

插件要尽量智能, 但是不能以打断思考作为代价
如果会打断思考堆栈, 就会选择用手指机械劳动的实现方式来替换那些所谓的智能实现方式

#43

今天写了一个补丁 https://github.com/manateelazycat/awesome-pair/commit/e81a9a3c8ecc2aca2e9f1ba370380c6f0c0fb870

修复某些情况下, awesome-pair-jump-out-pair-and-newline 函数无法删除干净多余空格的问题.


#44

今天社区大神写了一个新的函数 awesome-pair-forward-delete https://github.com/manateelazycat/awesome-pair/pull/6

awesome-pair-backward-delete 是一个向左智能删除的函数

今天新加的 awesome-pair-forward-delete 是一个智能向右删除的函数, 强烈建议大家绑定到 C-d 上, 这样向右删除字符串或者括号内容的时候, 超级方便. :wink:

就喜欢这种一起床就有人发PR的感觉, 哈哈哈哈哈.


#45

写shell时,有下面的写法

case x in 
     abc)
     ...
     ;;
     xyz)
     ...
     ;;
     *)
     echo "...."
easc

但现在,没法直接先输入右括号,一输入就直接跳走了。只能先输入左括号,出现()后,再把左括号去掉

已提issue


#46

29901e7 已经修复了

如果还有问题请提新的issue


#47

slurp和barf这两个功能,我看前面你说不常用,但我却经常用到,不知现有的操作如何替代?

比如: v.age 后来发现v.age是个int形指针,想改成*(v.age)

我现在的做法是先M-(,得到*(v).age,再把有括号删掉,拷贝到最后


#48

这个只在lisp语言有用,但我用的不多,欢迎提交补丁


#49

遇到一个奇怪的问题,当通过ssh链接到一台机器后,在终端启动emacs,打开elisp文件,比如按下F7键,却映射到M-[键了,执行(awesome-pair-wrap-bracket)。

我本地是Mac,远程是Ubuntu。不知大家遇到过没有?


#50

你这些包都挺好用,但是恕我直言,看见awesome这个前缀我就要吐了。。。。换换别的好不,比如lazycat


#51

那就不用吧,不强求


#52

你这要求就好像对一个人说:你这个人其他地方都蛮好的,就是你这个名字我听了就想吐,能换个别的好不?