在emacs中向前移动复合语句

3

有没有一个 Emacs 命令可以在 C 或 C++ 文件中向前移动复合语句?

如果我有以下代码:

^ if (foo)
{
   doSomething();
}$

光标所在位置为插入符(^),我想执行M-x forward-compound-statement RET命令并将光标移动到$符号。

forward-sexp看起来应该是正确的命令,但它只能跨越一个单词,将光标放在if后面。c-end-of-statement也不对,因为它只会到第一个闭合括号。

编辑:在if-then-else-if-else块的情况下,理想情况下我希望它能够快速获得所有的else块。

我还希望将来能在编写的defuns中使用它,因此按键次数不太重要,而是需要一个命令来完成它,而不是重复多个命令直到它到达正确的位置。


forward-list和backward-list更接近您所寻找的吗? - Adam Rosenfield
当标记在 { 时,forward-sexp 将从 { 跳转到 } - ldav1s
@wvxvw 关于 else 语句的问题问得好。在我考虑的特定情况下,没有 else。一般来说,我想让它到达下一个可以插入分号而不改变代码的地方,因此它将跳过 else / else if 块。 - Troy Daniels
@AdamRosenfield 这已经接近了。在我的例子中,它从插入符号移动到 foo 之后,但仍然没有达到我想要的位置。 - Troy Daniels
是的,forward-sexp 应该是正确的命令。但是 c-mode 没有尝试解释如何跳过这样的语句。从 $ 返回到 ^ 更加棘手,因为 $ 位于 if 表达式和 {...} 块的末尾,所以对 backward-sexp 的请求是模糊的。 - Stefan
1个回答

1

类似于forward-compound-statement这样的命令可能会在特定的主要模式下存在。但我不建议你去学习它们。

相反,我建议你使用更可组合的命令来导航,例如C-s。你可以尝试使用像jump-char这样的命令来缩短按键序列。


我本来想推荐 ace-jump-mode,但如果你查找 jump-char,你会发现它是对它的推荐。 - Nicolas Dudebout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接