Windows 10(64位),Emacs 25.1
假设我有文字:
aa11aaa aaaaa "api/method1" bbbbbbb
dddeeee ee "api/method2" ddddddd
ee2222ezzzzzzzzzzzzzzzzzz "api/method1" eeeeeee
aaaaaaa222222222222"api/method3" fffffff
xwwwwxx "api/method4" bbbbbbb
我想剪切包含" api / XXX"
的所有文字,其中 XXX 是方法名称(例如 method4 )
。所以结果必须是:
aa11aaa aaaaa bbbbbbb
dddeeee ee ddddddd
ee2222ezzzzzzzzzzzzzzzzzz eeeeeee
aaaaaaa222222222222 fffffff
xwwwwxx bbbbbbb
我想使用Emacs的内置功能(无需编写自定义elisp脚本或Emacs宏)。
答案 0 :(得分:0)
您所做的就是搜索该字符串并将其替换为空字符串(无字符):
将光标放在要开始搜索和替换的位置,执行以下操作:
M-x replace-string RET api/XXX RET RET
或者如果您需要匹配正则表达式,请改用命令replace-regexp
。
或者,如果您想单独检查每个搜索命中并告诉Emacs是否要替换它,请使用query-replace
(M-%
)或query-replace-regexp
(C-M-%
)。在查询时,您可以点击!
以从当前位置向前进行替换。
使用C-h f
并输入命令名称以获取有关该命令的更多信息。例如,C-h f replace-string
告诉您:
replace-string
是一个交互式编译的Lisp函数replace.el
。(replace-string FROM-STRING TO-STRING &optional DELIMITED START END BACKWARD)
此功能仅供交互使用; 在Lisp代码中使用
search-forward
和replace-match
代替。将
FROM-STRING
的出现次数替换为TO-STRING
。如果
case-replace
和case-fold-search
保留每场比赛的大小写 是非nil
而FROM-STRING
没有大写字母。 (保留案例意味着如果匹配的字符串是全部大写,或大写, 然后它的更换被提升或大写。)如果
query-replace-skip-read-only
不是nil
,则忽略只读匹配, 如果search-invisible
为nil
,则忽略隐藏的匹配,并忽略更多 匹配使用isearch-filter-predicate
。如果
replace-lax-whitespace
为非nil
,则为字符串中的空格或空格 要替换的将匹配由。定义的一系列空白字符search-whitespace-regexp
中的正则表达式。如果
replace-char-fold
为非零,则匹配使用字符折叠, 即它忽略了变音符号和等价物之间的其他差异 字符串。第三个arg
DELIMITED
(前缀为arg,如果是交互式的),如果不是nil
,则表示替换 只有字边界包围的匹配。否定前缀arg表示 向后替换。在
START
和END
之间的区域(如果两者都是nil
,从点开始操作 到缓冲区的末尾)。交互式,如果是瞬态标记模式 启用并且标记处于活动状态,对该区域的内容进行操作; 否则从点到缓冲区可访问部分的末尾。使用
M-n
将最后一个增量搜索字符串拉到迷你缓冲区 读取FROM-STRING
。在Lisp程序中使用此函数通常是错误的。
你可能想要的是这样的循环:
(while (search-forward FROM-STRING nil t) (replace-match TO-STRING nil t))
运行速度更快,不会设置标记或打印任何内容。 (如果
FROM-STRING
可以匹配空字符串,则可能需要更复杂的循环 并且TO-STRING
也为空。)