想象一下,我在Emacs下打开的文本文件中有以下内容:
some 34
word 30
another 38
thing 59
to 39
say 10
here 47
Run Code Online (Sandbox Code Playgroud)
我想变成这个,每个2位数字加1:
some 35
word 31
another 39
thing 60
to 40
say 11
here 48
Run Code Online (Sandbox Code Playgroud)
(这是一个简短的例子,我的实际需要是一个更大的列表,而不是我的电话)
我怎么能从Emacs做到这一点?
只要直接从Emacs进行调用并且仅在我想要的标记区域上操作,我不介意调用一些外部Perl/sed /任何魔法.
你会如何从Emacs自动化这个?
我认为我正在考虑的答案包括调用shell-command-on-region并用输出替换该区域......但我不确定如何具体地执行此操作.
hua*_*uan 44
这可以通过使用命令query-replace-regexp(绑定到C-M-%)来解决:
C-M-%
\b[0-9][0-9]\b
return
\,(1+ \#&)
随后的表达式\,将被评估为Lisp表达式,其结果用作替换字符串.在Lisp表达式中,\#&将被匹配的字符串替换,解释为数字.
默认情况下,这适用于从光标开始的整个文档.要在该地区开展这项工作,有以下几个方面:
有关详细信息,请参阅" Remaxp替换 Emacs手册" 一节.
它不能防止99-> 100.
(defun add-1-to-2-digits (b e)
"add 1 to every 2 digit number in the region"
(interactive "r")
(goto-char b)
(while (re-search-forward "\\b[0-9][0-9]\\b" e t)
(replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))
Run Code Online (Sandbox Code Playgroud)
哦,它在该地区运作.如果你想整个文件,然后替换b并e与(point-min)和nil.
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |