Search 在emacs中的矩形内搜索和替换

Search 在emacs中的矩形内搜索和替换,search,emacs,replace,Search,Emacs,Replace,是否可以在emacs中的矩形区域内执行replace string操作?如果是,如何实现?如果启用CUA选择模式: M-xcua选择模式RET 或永久保存在您的初始文件中: (cua-selection-mode 1) 然后可以使用它的高级矩形编辑功能 (或者,如果您是cua模式用户,则不需要这样做。) C-RET标记一个角 将点移动到对面的拐角处 M-r在标记的矩形内执行regexp替换 C-RET取消标记/退出矩形编辑 有关文档,请在M-xfind libraryRETCUA base

是否可以在emacs中的矩形区域内执行
replace string
操作?如果是,如何实现?

如果启用CUA选择模式:

M-x
cua选择模式
RET

或永久保存在您的初始文件中:

(cua-selection-mode 1)
然后可以使用它的高级矩形编辑功能

(或者,如果您是
cua模式
用户,则不需要这样做。)

  • C-RET标记一个角
  • 将点移动到对面的拐角处
  • M-r在标记的矩形内执行regexp替换
  • C-RET取消标记/退出矩形编辑
有关文档,请在M-x
find library
RET
CUA base
RET中的注释中查找“CUA矩形支架”标题

如果您出于某种原因不想使用cua矩形工具(也许您确实需要
替换字符串
),那么使用
应用于矩形
的自定义函数将非常简单

编辑:实际上,比我预期的要复杂一些,但大多数代码都是交互式规范和对“分隔”前缀参数行为的支持(两者都基于
替换字符串

编辑2:我认为这值得以一种更全面的方式来做:

下面提供了C-xrM-%和C-xrC-M-%,它们(希望)按照您期望的方式工作

(需要“rect”)
(在矩形中取消搜索替换)
(开始-结束搜索模式替换搜索函数文字)
“替换SEARCH-PATTERN的所有实例(由SEARCH-FUNCTION找到)
使用替换,在开始创建的矩形的每一行中
和末端缓冲位置。
SEARCH-FUNCTION应采用与相同的绑定参数和无错误参数
`“向前搜索”和“向前重新搜索”。
在替换过程中,文字参数被传递给“replace match”。
如果“case replace”为零,则不要更改替换文本的case。”
(适用于矩形
(lambda(开始列结束列搜索功能搜索模式替换)
(移动到列起始列)
(let((边界(最小值(+(点)(-end col-start col))
(线路末端位置)))
(固定案例(非案例替换)))
(while(funcall搜索函数搜索模式绑定t)
(替换匹配替换fixedcase文字)))
开始-结束搜索功能搜索模式替换)
(解除我的替换regexp矩形读取参数(regexp标志)
“交互式读取'my replace regexp rectangle'的参数”
或“我的替换字符串矩形”(取决于REGEXP-FLAG)
(让((args)查询替换读取args
(concat“替换”
(如果当前前缀为arg“word”“”)
(如果regexp标志为“regexp”“string”))
regexp(标记)))
(列表(区域开始)(区域结束)
(第n个0个参数)(第n个1个参数)(第n个2个参数)))
(卸载我的replace regexp矩形
(起始-结束regexp到字符串&可选分隔符)
“对矩形的每一行执行regexp搜索和替换
由开始和结束建立(以交互方式,标记区域),
类似于“replace regexp”。
可选参数分隔(如果是交互式的,则前缀为arg),如果不是nil,则表示
仅替换由单词边界包围的匹配项。
如果“case replace”为零,则不要更改替换文本的case。”
(交互式(我的replace regexp矩形读取参数t))
(当分隔时)
(setq regexp(concat“\\b”regexp“\\b”))
(我的搜索替换为矩形。)
开始结束regexp到字符串“重新搜索前向零”)
(取消我的替换字符串矩形)
(从一个字符串开始到另一个字符串结束&可选分隔符)
“对矩形的每一行执行字符串搜索和替换
由开始和结束建立(以交互方式,标记区域),
类似于“替换字符串”。
可选参数分隔(如果是交互式的,则前缀为arg),如果不是nil,则表示
仅替换由单词边界包围的匹配项。
如果“case replace”为零,则不要更改替换文本的case。”
(交互式(我的replace regexp矩形读取args nil))
(let((搜索功能“向前搜索”)
(当分隔时)
(setq搜索功能“向前重新搜索”
从字符串(concat“\\b”(从字符串中引用regexp“\\b”))
(我的搜索替换为矩形。)
从字符串开始到字符串结束搜索函数(t)))
(全局设置键(kbd“C-x r M-%”我的替换字符串矩形)
(全局设置键(kbd“C-x r C-M-%”我的替换regexp矩形)

如果您处于CUA模式,可以在绑定到“M-r”的矩形中使用CUA替换

对于邪恶的用户,您可以使用我的软件包在邪恶的可视块中获取
query replace
replace regexp

在最近的Emacs(例如Emacs 25)中,您可以使用
M-%
query replace
)或
C-M-%
query replace regexp

使用
M-x矩形标记模式
创建矩形区域。如有必要,使用
C-x C-x
将点置于标记之前。然后,只需查询替换

然而,他们没有在Emacs25中对
replaceString
进行相同的更改。如果愿意,您可以这样做,只需添加参数
region-noncontigural-p
,方法与在
query replace
中相同。代码很简单:

(定义替换字符串(从一个字符串到另一个字符串&可选的带分隔符的开始-结束向后
区域-非邻接-p)
"..."
(仅限交互式)
“使用“向前搜索”和“替换匹配”。)
(互动
让((公共)
(查询替换读取参数)
(concat“替换”
(如果当前前缀为arg
(如果(均衡器当前前缀arg'-)“向后”“单词”)
"")
“字符串”
(如果(使用-region-p)“在region”“中”)
零))
(列表(第n个0公用)(第n个1公用)