gpt4 book ai didi

emacs - 通过参数列表移动

转载 作者:行者123 更新时间:2023-12-01 09:02:56 25 4
gpt4 key购买 nike

我是一名 C++ 程序员,使用由 cc-modeCEDET 组成的设置,当然还有我们心爱的 emacs (v24.2)。

我缺少的一个功能是一个通过参数列表快速移动点的函数。考虑这个例子:

void takesManyArgs( int a1, int a2, int a3, std::pair<int,int> a4, int a5 ){  
// does something nifty!
}
// [...]
takesManyArgs( b1, b2, b3, make_pair( b4, b5 ), b6 );

其中点就在第一个 int 之前。现在我想要一种简单的方法来快速浏览参数列表,即在逗号后面的第一个非空白字符(参数分隔符)。
我已经编写了一个小函数来完成它,但它并不是我想要的工作方式:

(defun arg-forward ()  
"Move point forward in the file until we hit an argument separator, i.e. comma, colon or semicolon."
(interactive)
(progn
(re-search-forward "[,]")))

原则上这个函数只是跳转到下一个逗号。这不是我想要的行为。

我想要一个函数:

  • 编辑: 跳转到下一个参数分隔符(即 C++ 的逗号)并将点放在该参数分隔符之后
  • 检查逗号后是否有空格;如果有一个,点将移动到第一个非空白字符(即,而不是 ,| int 它看起来像 , |int where |标记点)
  • 在参数列表的末尾停止并打印一条消息(例如“在参数列表的末尾”)
  • 保持在其“范围”内,即它将从 |int b3|make_pair( int b4, int b5 )|int a6 其中 | 标记点

感谢您elisp“黑客”的任何帮助!

编辑:添加了一些说明。
Edit2:修正了那个例子“代码”

最佳答案

这个函数似乎符合你的要求:

(defun arg-forward ()
"Move point forward until we hit an argument separator, the comma, colon, semicolon"
(interactive)
(condition-case nil
(let ((separator-regexp "[,:;]"))
(forward-sexp)
(while (not (or (looking-at (format "[ \t]*%s" separator-regexp))
(save-excursion (forward-char -1)
(looking-at (format "[]\"')}]*[ \t]*%s " separator-regexp)))))
(forward-sexp))
(if (looking-at separator-regexp)
(forward-char 1))
;; going forward one sexp and back puts point at front of sexp
;; essentially skipping the whitespace, but also ensuring we don't
;; jump out of a larger closing set of parentheses
(forward-sexp)
(forward-sexp -1))
(error
(beep)
(message "At end of argument list"))))

关于emacs - 通过参数列表移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com