我手工编辑CNC G代码文本文件,需要一种方法来引用文件和刀具路径中的位置。我想修改文本文件中的每一行,使其以大写N字符开头,后面跟随每行连续增加十行的行号,然后是一个空格,然后是原始文本文件。我可以在vi中做这个吗?前面加字符N后跟行号
4
A
回答
0
有两种可能的方式做到这一点,而无需使用外部工具:宏或Vim脚本。在我看来,第一种方式有点麻烦(可能不如下面列出的解决方案有效)。
第二种方式可以这样来实现的(把代码放到你的.vimrc
或来源它的其他方式):
function! NumberLines(format) range
let lfmt = (empty(a:format) ? 'N%04d' : a:format[0]) . ' %s'
for lnum in range(a:firstline, a:lastline)
call setline(lnum, printf(lfmt, lnum, getline(lnum)))
endfor
endfunction
command! -range=% -nargs=? NumberLines <line1>,<line2>call NumberLines([<f-args>])
NumberLines
函数枚举在一个给定的范围,该文件的所有线路预规划到每一行其编号根据给定的printf格式(默认为'N%04d')。为了简化这个函数的使用,我在这里创建一个新的命令,它接受要处理的行的范围(默认为整个文件)和行号的可选参数格式。
0
作弊答案:
:%!awk '{print "N" NR "0", $0}'
0
下面的命令将前面加上 'N < 行号* 10 >' 到每一行。
:g/^/exe 'normal! 0iN' . (line('.')*10) . ' '
+0
它比脚本慢得多。例如,在我的系统中,该命令处理100,000行文件需要6秒,而上面列出的脚本在不到2秒的时间内(当然是在同一文件中)。 – 2010-04-20 01:02:24
0
你可以用这个做很容易在Vim的:
:%s/^/\=line(".")*10 . " "/
这种替换,使该行数十倍的表达式的结果,每一行的开头,后面加一个空格。
我还没有计时,但我怀疑它比其他Vim解决方案明显更快。
相关问题
- 1. 使用sed获取前N个字符和后N个字符
- 2. 运算符后面跟一个字符
- 3. 在符号后面分割字符串,在符号后面获得字符串
- 4. 字符串的最后一个字符前加逗号在C#
- 5. 加下划线的前n个字符
- 6. 在(n)个字符后面插入一个字符并重复(n)次 - vim
- 7. 返回后面跟着大括号和后面跟着花括号的下一行返回之间的区别
- 8. 替换符号或逗号后跟任意字母记事本++
- 9. 将字符串插入MySQL后,字符'\ n'(换行符)消失
- 10. 字符串的前n个字符,即使它比n短?
- 11. 前后变量n-child(n)
- 12. 使用切片符号反转来自字符串的最后n个字符
- 13. 在最后一行之前附加文件第n行
- 14. 删除任何第一个字符前面和后面的任何最后一个字符前面的空格
- 15. 当空格后面跟着标点符号时,IE不会换行
- 16. 在括号或逗号前面加上字符的正则表达式
- 17. 从R语言的字符“\ n 0.28 \ n \ n”中获得编号
- 18. 执行前向字符串添加引号?
- 19. RegExp获取前后的N个字
- 20. 正则表达式,后跟冒号的16个字符
- 21. [R正则表达式的数字,后跟标点符号
- 22. 选择二开始匹配的前n个字符后
- 23. 如何在第n个字符之前或之后提取子字符串
- 24. 前n行
- 25. 总结后得到组的前n行
- 26. 发射换行字符 “\ n”
- 27. 正则表达式获得2位数字不立即前面和后面跟着一个字符在java
- 28. 如何从字符串中提取特定符号,如果它们跟在数字后面
- 29. Groovy @字段前的符号
- 30. uniq的跳过前N个字符/场
他特别问了这是否可能在vi中,所以这个答案是无益的恕我直言。 – 2010-04-28 09:11:17
@Airir Rachum * *在*中。 – hobbs 2010-04-28 20:32:47
这不就是在调用外部命令吗?无论如何,对于我的误解感到抱歉,我希望不会有任何冒犯。 – 2010-04-28 23:09:15