Emacs的。如何剪切所有文字包含" some_text / XXX"从另一个文字?

时间:2017-05-27 13:10:39

标签: search replace emacs

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宏)。

1 个答案:

答案 0 :(得分:0)

您所做的就是搜索该字符串并将其替换为空字符串(无字符):

将光标放在要开始搜索和替换的位置,执行以下操作:

M-x replace-string RET api/XXX RET RET

或者如果您需要匹配正则表达式,请改用命令replace-regexp

或者,如果您想单独检查每个搜索命中并告诉Emacs是否要替换它,请使用query-replaceM-%)或query-replace-regexpC-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-forwardreplace-match代替。

     

FROM-STRING的出现次数替换为TO-STRING

     

如果case-replacecase-fold-search保留每场比赛的大小写   是非nilFROM-STRING没有大写字母。   (保留案例意味着如果匹配的字符串是全部大写,或大写,   然后它的更换被提升或大写。)

     

如果query-replace-skip-read-only不是nil,则忽略只读匹配,   如果search-invisiblenil,则忽略隐藏的匹配,并忽略更多   匹配使用isearch-filter-predicate

     

如果replace-lax-whitespace为非nil,则为字符串中的空格或空格   要替换的将匹配由。定义的一系列空白字符   search-whitespace-regexp中的正则表达式。

     

如果replace-char-fold为非零,则匹配使用字符折叠,   即它忽略了变音符号和等价物之间的其他差异   字符串。

     

第三个arg DELIMITED(前缀为arg,如果是交互式的),如果不是nil,则表示替换   只有字边界包围的匹配。否定前缀arg表示   向后替换。

     

STARTEND之间的区域(如果两者都是nil,从点开始操作   到缓冲区的末尾)。交互式,如果是瞬态标记模式   启用并且标记处于活动状态,对该区域的内容进行操作;   否则从点到缓冲区可访问部分的末尾。

     

使用M-n将最后一个增量搜索字符串拉到迷你缓冲区   读取FROM-STRING

     

在Lisp程序中使用此函数通常是错误的。

     

你可能想要的是这样的循环:

  (while (search-forward FROM-STRING nil t)
    (replace-match TO-STRING nil t))
     

运行速度更快,不会设置标记或打印任何内容。   (如果FROM-STRING可以匹配空字符串,则可能需要更复杂的循环   并且TO-STRING也为空。)