我经过很多年的探索, 发现最好用的左右跳转, 就是简单像下面的方式进行正则表达式搜索:
(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 类似的插件以后, 依然选择用这种最简单的跳转方式, 因为这些看似实现智能的插件, 当你真正想跳转的时候, 还会花一部分精力去想怎么跳转, 这样做有时候会占用你宝贵的脑部堆栈, 从而打断你对复杂逻辑状态的追踪.
所以, 我这么多年的插件奉行一个原则:
插件要尽量智能, 但是不能以打断思考作为代价
如果会打断思考堆栈, 就会选择用手指机械劳动的实现方式来替换那些所谓的智能实现方式
4 个赞
今天社区大神写了一个新的函数 awesome-pair-forward-delete add awesome-pair-forward-delete by BooAA · Pull Request #6 · manateelazycat/awesome-pair · GitHub
awesome-pair-backward-delete 是一个向左智能删除的函数
今天新加的 awesome-pair-forward-delete 是一个智能向右删除的函数, 强烈建议大家绑定到 C-d 上, 这样向右删除字符串或者括号内容的时候, 超级方便.
就喜欢这种一起床就有人发PR的感觉, 哈哈哈哈哈.
2 个赞
写shell时,有下面的写法
case x in
abc)
...
;;
xyz)
...
;;
*)
echo "...."
easc
但现在,没法直接先输入右括号,一输入就直接跳走了。只能先输入左括号,出现()
后,再把左括号去掉
已提issue
slurp和barf这两个功能,我看前面你说不常用,但我却经常用到,不知现有的操作如何替代?
比如:
v.age
后来发现v.age是个int形指针,想改成*(v.age)
我现在的做法是先M-(,得到*(v).age
,再把有括号删掉,拷贝到最后
这个只在lisp语言有用,但我用的不多,欢迎提交补丁
遇到一个奇怪的问题,当通过ssh链接到一台机器后,在终端启动emacs,打开elisp文件,比如按下F7键,却映射到M-[键了,执行(awesome-pair-wrap-bracket)。
我本地是Mac,远程是Ubuntu。不知大家遇到过没有?
SGNH
2019 年2 月 14 日 13:23
50
你这些包都挺好用,但是恕我直言,看见awesome这个前缀我就要吐了。。。。换换别的好不,比如lazycat
你这要求就好像对一个人说:你这个人其他地方都蛮好的,就是你这个名字我听了就想吐,能换个别的好不?
1 个赞
web-mode 默认会开启 auto-quoting 的功能, 在写属性的时候, 比如键入 foo = 等号以后, 会自动变成 foo = “” 并把光标放到两个双引号中.
这个功能超级好用, 但是 web-mode 只是暴力的在 = 后面添加 “” , 它并不会根据语法来做判断, 比如在属性字符串中写入 = 的时候, 就会非常烦人的在字符串里面插入多余的 “”
前几天通过配置
(setq web-mode-enable-auto-quoting nil)
关闭了这个功能.
但是这几天用了一下, 平常的属性编写的时候又变麻烦了, 今天给 awesome-pair.el 加了一个新的命令: awesome-pair-equal
(defun awesome-pair-equal ()
(interactive)
(cond
((derived-mode-p 'web-mode)
(if (awesome-pair-in-string-p)
(insert "=")
(insert "=\"\"")
(backward-char 1)))
(t
(insert "="))))
(define-key awesome-pair-mode-map (kbd "=") 'awesome-pair-equal)
作用就是, 当发现 web-mode 的时候, 如果在代码区域自动插入 = “”, 如果在字符串区域只插入 =
这样就又可以自动插入属性双引号, 又不会干扰字符串内容了.
更新最新版即可拥有这一贴心的功能.
BTW, 用 paredit 的同学转 awesome-pair 吧.
2 个赞
正在跟原来的 paredit 比较,没看见 awesome-pair 里有类似 paredit-join 或 paredit-split 的函数啊。虽然我也感觉这俩步子有点大,平时不怎么用……
这个补丁 Add new command `awesome-pair-space'. · manateelazycat/awesome-pair@10732ef · GitHub 的作用是:
在编写 JavaScript 代码时, 当写入 [] 或 {} 括号时, 如果第一个字符是 SPACE, 会自动在光标后再插入一个空格, 避免括号中的内容写完以后还需要手动敲一个空格.
在写 JSON 字符串的时候特别方便.
2 个赞
committed 04:32AM - 14 May 19 UTC
今天加了一个补丁:
在web-mode注释和字符串中,按等号插入 =
当web-mode编辑 vue 文件时,如果在 template 区域,按等号插入 =“”, 如果在 script 或者 style 区域按等号插入 =
web-mode 不是编辑 vue , 而是编辑模板文件时, 按等号插入 =“”
其他模式按等号插入 =
awesome-pair.el 会根据语境自动决定是否按等号是否插入 =“”
1 个赞
今天增强了一下 awesome-pair-web-mode-element-wrap 命令:
committed 01:31PM - 04 Jun 19 UTC
在选中 HTML 模板时,更加智能的自动缩进,原来在极限情况下,偶尔需要在 wrap 以后再手动调整一下,现在全自动的,wrap 以后自动缩进wrap的代码区域。
今天加了一个补丁:
committed 03:05AM - 25 Jun 19 UTC
调用 awesome-pair-wrap-round 命令时,如果在 Vue template 区域,自动 wrap HTML tag, 如果在其他区域 wrap ()