0

我在 vi 编辑器中打开了一个包含 9 列的文本,我喜欢用逗号替换第 9 列(最后一个)中的制表符,后跟一个空格。到目前为止,我想出了这个;

'2,$s#\(^.\{8\}\)\\t#\1\(\,\)#'

但这似乎不匹配任何东西......可能是我逃避了太多东西,但我也不知道您是否需要指定列分隔符(在这种情况下也是一个制表符)。对此的任何帮助将不胜感激。

4

2 回答 2

1
%s/^\(\%(\t\?[^\t]\+\)\{8\}\)\t\(.*\)$/\1, \2/

这将替换 ( s):

  • ^- 线的开始
  • \(开始(第 1 组)
    • \%(内部组的开始
      • \t?0 或多个s(以说明在行Tab首缺少 a )Tab
      • [^\t]\+后跟 1 个或多个Tab
    • \)内组结束
    • \{8\}上述内组重复8次
  • \)结束(第 1 组)
  • \t其次是Tab
  • \(.*\)以及其他(第 2 组)
  • $直到行尾

和:

  • \1- (第 1 组)(直到 8号Tab
  • - 逗号和空格
  • \2- (第 2 组)(从第 8Tab行到行尾的所有内容)

在整个缓冲区 ( %)。

于 2012-11-04T10:24:32.863 回答
0

如果这是一次性替换,您可以改用宏(从您希望更改的第一行的第一个字符开始):

qqfTab7;cl,SpaceEscj0q

其中按键如下:

  • qq– 开始在寄存器q中录制宏
  • fTab– 找到第一个制表符(即在第 1 列和第 2 列之间)
  • 7;– 重复此查找七次(即到第 8 列和第 9 列之间的制表符)
  • cl,SpaceEsc– 将制表符更改为逗号和空格
  • j– 下一行
  • 0– 转到此行的开头
  • q- 停止录制宏

然后使用@q播放下一行(或99@q播放接下来的 99 行等)。

于 2012-11-04T11:46:37.680 回答