2017-05-27 42 views
0

的Windows 10(64位),Emacs的25.1Emacs。如何从其他文本中删除所有文本中的“some_text/XXX”?

假设我有文本:

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所有文字是方法名称(例如,方法4

。因此,其结果必然是:

aa11aaa aaaaa bbbbbbb dddeeee ee ddddddd ee2222ezzzzzzzzzzzzzzzzzz eeeeeee aaaaaaa222222222222 fffffff xwwwwxx bbbbbbb

我想使用Emacs的内置功能(无需编写自定义的elisp脚本或Emacs宏)。

回答

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-stringreplace.el互动编译Lisp函数。

(replace-string FROM-STRING TO-STRING &optional DELIMITED START END BACKWARD) 

此功能仅用于交互式使用;在Lisp代码中使用 代替使用search-forwardreplace-match

TO-STRING替换出现的。

保留的情况下每场比赛,如果case-replacecase-fold-search 是非nil和没有大写字母。 (保留情况下意味着,如果匹配的字符串是全部大写,或大写, 则其更换upcased或大写)。

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

replace-lax-whitespace如果是非nil,字符串 在空间或空间被替换将匹配由正则表达式 在search-whitespace-regexp定义的空白字符的序列。

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

第三参数DELIMITED(前缀arg if interactive),如果不是nil,表示替换 只有字边界包围的匹配。负前缀arg意味着 将被替换为后向。

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

使用M-n将最后一个增量搜索字符串拉到小写缓冲器 ,读取。

这个函数通常是在Lisp程序中使用的错误的东西。

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

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

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

相关问题