不知道各位在用emacs写代码的时候是如何在函数的参数间进行跳转的,参数选择的,一个字符一个字符的移动好慢啊。vim下好歹有textobj args的插件,emacs下有类似的吗,难不成得自己写一个
我用forward-sexp
和backward-sexp
默认绑定到C-M-f
和C-M-b
就算是原生vim用户也知道B
和E
吧
这个跳转不准确.
int function(int arg1, char *arg2, exp(a,b,c), int arg4);
当光标在arg1下,此时,想选中arg2,也就是第一个’,‘和第二个’,'之间的内容.或者跳转,或者选中,或者编辑. B 仅仅是单词的跳转,会跳过头.
「这个」是指哪个?
forward-sexp
还是很准确的,自己再包装一下完全符合需求:
int function(int arg1, char *arg2, exp(a,b,c), int arg4);
// | | | | | | | |
// 1 2 3 4 5 6 7 8
//
// ---- forward-sexp / c-forward-sexp ---->
多谢,一会儿试试,看看咋样用着
其实无论 forward-sexp
、c-forward-sexp
还是 paredit-forward
都足够用了,除非是以下这种情况,会让人有点不爽:
(arguments_type arguments_name, ...)
~~~*~~~~~~~~~~ ~~~~~~~~~~~~~~
| ^ ^
| | |
|---->-----' |
| actual |
| |
'---------->---------'
expected
但是只要配置合理,比如我用 hydra
+ (paredit-forward)
,只要按 <leader-key> f
再加按一次 f
就到了,远比按两次 C-M-f
轻松。
也比专门写一个 forward-arg
代价要小,因为 f
键使用频率极高,不能浪费在绑定这么冷门的函数上,但如果绑定到比较偏的快捷键,那么使用前还得查一查小抄。
如果坚持要实现一个 forward-arg
,我认为不应该跳过参数类型:
int function(int arg1, char *arg2, exp(a,b,c), int arg4);
* ^
| |
'----->-----'
不应该跳过中间的 char
,因为这种情况下,类型也是可能需要修改的。否则你可能需要两个函数+两个快捷键了:forward-arg-variable
& forward-arg-type
。这只会使得事情变得更复杂。
我个人是比较推荐善用现成的函数。好的设计是尽量让使用的时候无感。