我想用一个字符串替换每个子匹配,该字符串的递增索引从每行开头的1开始,因此替换字符串将是varargin {1},varargin {2},varargin {3} …对于更大的数字数字字符串自然需要多于1个字符,例如:… … varargin {9},varargin {10} …输入数据是MATLAB代码,示例输入和所需输出如下所示.我主要是寻找一个
vim解决方案,但其他方法也很受欢迎.
下面的正则表达式创建从1开始的运行索引,但这些只对每一行都有变化.
:let @a=1 | %s/\v.*'\zs.*\ze\);/\=substitute(submatch(0),'\s[a-zA-Z0-9{}_.]*',' varargin{'.(@a+setreg('a',@a+1)).'}','g')/g
我的问题是:
如何在每行的开头将索引重置为1并在每个子匹配之间将索引递增1?
上面的代码是在http://vim.wikia.com/wiki/Substitute_with_incrementing_numbers处提供的“替代升序号”示例的修改版本:
:let @a=1 | %s/abc/\='xyz_'.(@a+setreg('a',@a+1))/g
示例输入#1:
messages.msg1.English = xprintf('analysis directory is on %s\n',analysis_dir);
期望的输出例如输入#1:
messages.msg1.English = xprintf('analysis directory is on %s\n',varargin{1});
示例输入#2:
messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s',handling_struct.n_of_accepted,handling_struct.accepted_sessions_vector);
期望的输出例如输入#2:
messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s',varargin{1},varargin{2});
示例输入#3:
messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs',give_file_struct.regex,number_of_dirs);
期望的输出例如输入#3:
messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs',varargin{2});
解决方法
在这种情况下,我将使用以下命令.
:g/^/let n=[0] | s/abc/\='xyz_'.map(n,'v:val+1')[0]/g
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。