【问题标题】:How to Insert character based on position VIM如何根据位置 VIM 插入字符
【发布时间】:2022-01-21 12:41:48
【问题描述】:

到目前为止我所知道的。 '^' 字符是表示行首的特殊搜索字符。
和 g 表示全球变化。 基于How to add text at the end of each line in Vim?和How to insert text at beginning of a multi-line selection in vi/Vim

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

下面有:3个字段:整数、字符串/字母、整数。
我一直在尝试解决以下问题。

  • 在第一个整数值字段后插入逗号,。

  • 为第二个字母字符串插入单引号'',

  • 插入逗号以将字符串值字段分隔到最后一个整数 值字段。

    (1     a        80
    (1     b        50
    (2     a        90
    (2     b        120
    (3     a        200
    (3     b        140
    (4     a        110
    (4     b        430

【问题讨论】:

  • 您的“问题”表述不明确。添加一个“之后”示例,准确显示您想要获得的内容并向我们展示您尝试过的内容。此外,Vim 附带了一个非常全面但非常容易遵循的内置教程,:help user-manual。跟随它而不是通过堆栈交换答案说服自己你正在学习 Vim,你不是。
  • 请不要包含文字图片 - 而是将文字作为文字包含在内,以便人们可以复制并尝试答案/方法。
  • @mattb。我附上了文字。
  • @Mark - 谢谢,你能不能在之后添加它应该是什么样子的文本?并删除图像。干杯

标签: vim


【解决方案1】:

因为您的数据是对齐的,所以可视化模式会让这变得简单。假设您不想触摸空格,可能是制表符或空格:

CTRL-v           # enter visual mode with cursor on first int in first line
j or down arrow  # to the last line/last int
shift-i , ESCAPE # to insert comma and apply to visual range

单引号问题几乎相同,只是按 shift-a 以附加尾随单引号。要在末尾添加逗号,请选择要结束的任何列并点击:

$A,

将追加到行尾。我还假设这里没有尾随空格,否则它将在结尾处。

【讨论】:

  • 当然,如果它们是空格并且您不关心,请选择之后或之前的列并点击 r(comma,quote) 以简单地用适当的标点符号替换空格。
【解决方案2】:

如果你真的想用 Ex,那么

:%s/\((\d\+\)\s\+\(\w\+\)\s\+\(\d\+\)/\1, '\2', \3

然后按回车键。 \( \) 块是正则表达式组的 vim 正则表达式等效项。要了解有关 vim 正则表达式的更多信息,这与普通正则表达式有很大不同:http://www.vimregex.com/

【讨论】:

  • 谢谢。但是已经将其包装为()。然后我不确定我是否理解 \s\+\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2021-11-11
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多