【问题标题】:VIM column operationvim列操作
【发布时间】:2014-09-11 18:57:48
【问题描述】:

简介

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

示例

QWAER;PA 0X000055;123WAAAA
TYUIO;PA 0Y000056;123VAAAA

需要成为

QWAE@;PAX000055;123;WAAAA
TYUI@;PAY000056;123;VAAAA

修改@中的字符5 删除字符 9,10 插入 ;在原始 pos 22 中或在 pos 20 中删除后

更多信息

我经常这样做

放置光标和文本的开头以选择 按 CTRL-V(gVim 中的 CTRL-Q)开始选择列 按住 SHIFT 并选择感兴趣的区域 文件末尾的 go 然后进行替换插入或修改。 (这是我了解Keyboard-only column block selection in GVim Win32, or why does Ctrl-Q not emulate Ctrl-V when mswin.vim is included?的地方 在这里我学习如何插入(http://pivotallabs.com/column-edit-mode-in-vi/)

这不是做事的正确方法。

在 vim 中,我可以使用命令替换一系列行,等等。

我认为应该可以使用命令来替换每个字符串的一部分,但我对这些命令一无所知。

这是主要思想

Replacing alternate line in vi text file with a particular string

问题

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

谢谢

【问题讨论】:

    标签: vim


    【解决方案1】:
    :{range}normal 5|r@9|2x20|i;
    

    {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
    

    所以……

    • :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
    

    然后在{range}上播放:

    :{range}@q
    

    或者花 30 分钟尝试想出正确的:s// 命令……


    参考:

    :help range
    :help :normal
    :help |
    :help r
    :help x
    :help i
    :h recording
    

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 2018-10-09
      • 2013-02-18
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多