VIM列操作

use*_*895 0 vim

介绍

在Windows下的gVim中,我必须在每个文件串中替换insert和mod某些特定位置的字符.

QWAER;PA 0X000055;123WAAAA
TYUIO;PA 0Y000056;123VAAAA
Run Code Online (Sandbox Code Playgroud)

需要成为

QWAE@;PAX000055;123;WAAAA
TYUI@;PAY000056;123;VAAAA
Run Code Online (Sandbox Code Playgroud)

在@ delete char 9,10 insert中修改char 5; 在原始的pos 22或删除在pos 20之后

更多信息

通常我这样做

放置光标和文本的开头选择按CTRL-V(在gVim中按CTRL-Q)开始选择列保持按SHIFT并选择感兴趣的区域在文件的末尾,然后执行替换插入或修改.(这是我在GVim Win32中了解仅限键盘列块选择的地方,或者为什么在包含mswin.vim时Ctrl-Q不能模拟Ctrl-V? 在这里我学习如何进行插入(http:// pivotallabs .com/column-edit-mode-in-vi /)

这不是一个正确的做事方式.

在vim中,我可以使用命令替换扇形行等.

我认为应该可以使用命令来替换每个字符串的一部分,但我没有关于这些命令的Knoledge.

这是主要的想法

用特定字符串替换vi文本文件中的备用行

有没有办法使用具有绝对位置而不是选择的命令来执行操作.

谢谢

rom*_*inl 5

:{range}normal 5|r@9|2x20|i;
Run Code Online (Sandbox Code Playgroud)

您想要的内容包括{range}:

5|r@    " go to column 5 and replace the character with @
9|2x    " go to column 9 and cut 2 characters
20|i;   " go to column 20 and insert a ; to the right
Run Code Online (Sandbox Code Playgroud)

所以…

  • :5,25norm 5|r@9|2x20|i; 将该转换应用于第5到第25行,

  • :.,$norm 5|r@9|2x20|i; 将该转换从当前行应用到最后一行,

  • :'<,'>norm 5|r@9|2x20|i; 将该转换应用于当前(或最后)视觉选择,

  • :'{,'}norm 5|r@9|2x20|i; 将该转换应用于当前的"段落",

  • :%norm 5|r@9|2x20|i; 将该转换应用于整个缓冲区,

  • 等等…

您也可以记录它,让我们在注册时说q:

qq
5|r@
9|2x
20|i;<Esc>
q
Run Code Online (Sandbox Code Playgroud)

并播放{range}:

:{range}@q
Run Code Online (Sandbox Code Playgroud)

或者花30分钟试图找出正确的:s//命令......


参考:

:help range
:help :normal
:help |
:help r
:help x
:help i
:h recording
Run Code Online (Sandbox Code Playgroud)