【发布时间】:2012-11-18 10:13:12
【问题描述】:
我想在 Emacs 中构建一个正则表达式来清理我的 R 代码。
我遇到的一个问题是有不同类型的 cmets: 你有一定数量的空格(1),例如:
# This is a comment:
# This is also a comment
或者你有这样的情况(2):
require(lattice) # executable while the comment is informative
我的想法是,当 cmets 属于第二类(在可执行的内容之后)时,我想对齐它们,同时排除第一类的 cmets。
理想情况下,它会将所有 cmets 对齐在第一类而不是第一类之间。
例子:
funfun <- function(a, b) {
# This is a function
if (a == b) { # if a equals b
c <- 1 # c is 1
}
}
#
收件人:
funfun <- function(a, b) {
# This is a function
if (a == b) { # if a equals b
c <- 1 # c is 1
}
}
#
我找到了一个正则表达式来替代第一类,所以我能够按段落对齐它们(标记段落)。效果不错。
那么问题就是反向替换:
(replace-regexp "^\\s-+#+" "bla" nil (point-min) (point-max))
这将从行首替换为任意数量的空格和任意数量的注释字符,例如:
#########
进入
bla
问题是我想将它们替换回原来的样子,所以“bla”必须回到相同数量的空格和相同数量的#。
希望有人了解我正在尝试做的事情,并且对方法有更好的想法或知道如何解决这个正则表达式部分。
【问题讨论】:
-
我很难准确理解您的要求。您想用一些文本替换初始空格和注释标记,然后在行上运行转换,然后恢复空格和注释标记?
-
@wvxvw 我告诉你 wvxcw。只是我意识到只有 2 种类型的 cmets。因此,这是唯一阻止编写能够真正满足任何用户需求的脚本的问题!
-
@user4815162342 我实际上只是想暂时更改那些类型 (1) cmets,以排除它们对齐每个段落的第二个类型。