00 01 10 11
看起来像
000 001 010 011 100 101 110 111
当然我可以做暴力(如上所示),但我想快速做,因为我发现我做了很多这些.到目前为止,我的方法是猛拉并粘贴4Y 4j 4P
00 01 10 11 00 01 10 11
然后有一个命令在每行之前插入0次4次吗?我知道它有点像4,i,esc ~~我希望它是4轮0(向左移动),插入模式,插入0,重新命令模式.
谢谢
解决方法
y3j <C-v>3j I0<Esc> '> p <C-v>3j I1<Esc>
可以从1填充开始并使用P跳过’>:
y3j <C-v>3j I1<Esc> P <C-v>3j I0<Esc>
>仅使用Ex命令:
:,+3y<CR> :,+3norm! I0<CR> :put :<Up> "use commandline history to save some typing <Backspace>1<CR>
>使用替换和正常模式命令的混合:
y3j :,+3s/^/0<CR> p :<Up> <Backspace>1<CR>
如果你这么做,那么在宏中录制这可能是最好的策略.那时,实际的填充是如何完成的并不是真正相关的,因为你唯一的输入就是@x而且宏可能是瞬时的.
你在录音期间所做的事情并不重要,这里有一个例子:
qx y3j :,+3s/^/0<CR> p :,+3s/^/1<CR> q
假设你有这个:
[0]0 01 10 11
点击@x将上面的内容变为:
000 001 010 011 100 101 110 111
您的宏将保存到寄存器x中,并且仍可用于下一个Vim会话.
我相信有人可以想出一个漂亮的衬垫.
编辑
上面的宏的逐步说明:
> qx,在寄存器x中开始记录(它可以是任何可用的寄存器).
> y3j,猛拉当前行和接下来的三行.
>:,不需要解释.
>,3,这是我们正在研究的范围.定义此范围的更正确的方法是.,3.范围的起始行和结束行由逗号分隔.
起始行是当前行,我们可以省略它以保存一些类型,因此我们留下了昏迷,接着是结束行,相对于当前行表示,3.
> s / ^ / 0< CR> ;,这是一个简单的替换. 搜索模式中的^表示“行的开头”.它与第一个字符不匹配,所以它非常适合像这样的情况,我们想要在线上添加一些东西. 所以,基本上我们在前面添加一个0.它可以是你想要的任何东西. 对范围执行替换时,将对范围的每一行执行替换.在这里,我们有四行,所以每行前面都有一个0.
>< CR>,是……嗯……< Enter>用于执行替换的键.
> p,粘贴我们在当前行之下拉出的四条线.
>:,3s / ^ / 1< CR> ;,与之前相同但是为1.
> q,结束录音.
并且,为了回答您的评论,以下是您如何转变:
00 01 10 11
进入:
00 0.0 01 0.0 10 0.0 11 0.0
你需要使用另一个“锚”. ^是“行的开头”,$是“行的结尾”,因此替换变为:
:,+3s/$/ 0.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。