vim - 在 (n) 个字符后插入一个字符并重复 (n) 次 - vim

标签 vim configuration-files

我经常从我们的支持人员那里收到在 isc-dhcp 上进行 dhcp 预订的票证。有些打印机(cof,cof HP)这样在测试页上打印mac地址信息:002481F33A9C;很明显,支持人员以这种方式写入票证。我想更改为 00:24:81:F3:3A:9C 布局并使用一种有效的方式来执行“插入:在 2 个字符之后 4 次”。

我知道我可以用宏来实现:

qq     " start recording -> register q
ll     " move the cursor 2 characters right
i      " enter insert mode
:      " insert :
<Esc>  " switch to normal mode and cursor goes 1 character back
l      " move the cursor 1 character right(since insert mode back one character)
q      " stop recording
4@q    " execute macro 4 times

然后是:

host foo {
    hardware ethernet 002481F33A9C;
    fixed-address 192.x.x.x;
}

会变成这样:

host foo {
    hardware ethernet 00:24:81:F3:3A:9C;
    fixed-address 192.x.x.x;
}

有没有一种方法可以通过命令行模式更快地完成此操作并且无需录制宏,因为我们有很多办公室,并且将带有此宏的 vimrc 传递给所有机器(和冗余机器)可能是痛吗?

干杯

最佳答案

可能的解决方案:

:%s/\v(hardware ethernet) (..)(..)(..)(..)(..)(..);$/\1 \2:\3:\4:\5:\6\:\7;/g

解释:

  • 开启“非常神奇”模式

  • 匹配字符串 hardware ethernet 后跟 12 个字符,然后是分号和行尾

  • 将12个字符分成6个子表达式,每个子表达式由2个字符组成

  • 替换字符串,在每个子表达式之间插入一个冒号

关于vim - 在 (n) 个字符后插入一个字符并重复 (n) 次 - vim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241250/

相关文章:

haskell - 如何让 vim-haskellmode 和 cabal-dev 一起工作?

php - codeigniter:从其他配置文件访问配置变量?

apache - 将根域指向没有 IP 和 CNAME 的 Heroku(Rails)

c++ - C/C++ Unix配置文件库

vim - 在vim中插入文本加上模式的计数

git - 如何返回:Gblame after selecting a particular commit?的结果

vim - 使用Vim,如何将 'set statusline'右对齐?

java - 用户名、密码等硬编码到程序中——如何从文件中获取它们?

ubuntu - 缓慢的 Ubuntu SSH 登录