regex – 如何用vim中每行开头的从1开始的运行数替换子匹配
发布时间:2020-12-15 21:08:44 所属栏目:安全 来源:网络整理
导读:我想用一个字符串替换每个子匹配,该字符串的递增索引从每行开头的1开始,因此替换字符串将是varargin {1},varargin {2},varargin {3} …对于更大的数字数字字符串自然需要多于1个字符,例如:… … varargin {9},varargin {10} …输入数据是MATLAB代码,示例输
我想用一个字符串替换每个子匹配,该字符串的递增索引从每行开头的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 %sn',analysis_dir); 期望的输出例如输入#1: messages.msg1.English = xprintf('analysis directory is on %sn',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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 关于webservice大数据量传输时的压缩和解压缩
- An error occurred during the parsing of a resource requ
- VIM:我如何从左边的NerdTree面板打开一个文件在右边作为vs
- 调试 – 分析Vim启动时间
- scala – 在辅助构造函数中传递varargs
- AngularJS:无法读取会话值
- 主页概念在AngularJS?
- angularjs – angular.ui.popover不使用最新的角度1.3.3和a
- angular2使用PrimeNG-Scheduler实现FullCalendar-Scheduler
- 如何在angular2中将HTML转换为pdf?