如何在Vim的UltiSnips代码片段中执行多正则替换?
问题:在LaTeX代码片段中同时实现\label标签的小写转换与特殊字符替换
我正在尝试创建一个LaTeX章节的代码片段,用于自动填充\label标签。我希望该标签能替换特殊字符并将大写字符转换为小写字符。目前我可以分别实现这两个功能,代码如下:
# 转换为小写 snippet sec "Section" wi \section{$1${VISUAL}} \label{${2:${1/\w/\l$0/g}}} endsnippet # 替换特殊字符 snippet sec "Section" wi \section{$1${VISUAL}} \label{${2:${1/\W+/-/g}}} endsnippet
请问能否在同一段代码片段中同时实现这两个功能?如果可以,具体该如何操作?
解决方案
当然可以同时实现这两个功能,只需要在代码片段的替换表达式中链式调用两次正则转换即可——先把所有大写字符转成小写,再把非单词字符替换成连字符。
最终的代码片段如下:
snippet sec "Section" wi \section{$1${VISUAL}} \label{${2:${1/\w/\l$0/g}${1/\W+/-/g}}} endsnippet
或者也可以用嵌套的方式实现(逻辑上先处理小写转换,再基于转换后的结果替换特殊字符):
snippet sec "Section" wi \section{$1${VISUAL}} \label{${2:${${1/\w/\l$0/g}/\W+/-/g}}} endsnippet
两种写法都能达到目标:先将标题文本中的大写字母转为小写,再把所有非字母数字的特殊字符替换成连字符,生成符合规范的\label标签内容。
内容的提问来源于stack exchange,提问作者spubby
相关产品推荐
相关产品推荐

