Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更换vim中未对齐的柱_Vim_Replace_Field - Fatal编程技术网

更换vim中未对齐的柱

更换vim中未对齐的柱,vim,replace,field,Vim,Replace,Field,我看到过很多类似的帖子,它们告诉我如何在vim中替换文本列 当列以固定宽度排列时,这很简单 当列未对齐时,使用vim替换给定列中的文本如何 例如 我有一个包含多列的文件: col1 -col2 0.col3 +col4 col5. col1 0.col2 +col3 col4.0 -col5 col1.0 0.col2 +col3 -col4 col5 col1 col2.0 +col3 0.col4 -col5 -col1 col2.0 +col3 0.col4 col5 c

我看到过很多类似的帖子,它们告诉我如何在vim中替换文本列

当列以固定宽度排列时,这很简单

当列未对齐时,使用vim替换给定列中的文本如何

例如

我有一个包含多列的文件:

col1 -col2 0.col3 +col4  col5.
col1  0.col2 +col3  col4.0  -col5
col1.0 0.col2 +col3  -col4 col5
col1 col2.0  +col3 0.col4  -col5
-col1 col2.0  +col3 0.col4  col5
col1 -col2  +col3 0.col4  col5.0
我希望它看起来像

col1       0.col3 +col4  col5.
col1         +col3  col4.0  -col5
col1.0        +col3  -col4 col5
col1         +col3 0.col4  -col5
-col1         +col3 0.col4  col5
col1        +col3 0.col4  col5.0
  • 下面是一个使用替换的复杂解决方案:

    :%s/^\S*\s*\zs\(\S*\)/\=repeat(" ", len(submatch(1)))/g
    
    请参见
    :help:s
    :help submatch()
    :help repeat()

  • 这里有一个更简单的宏:

    :%normal WvEr <-- there's a space after the 'r'
    
    :%normal-WvEr
    • 下面是一个使用替换的复杂解决方案:

      :%s/^\S*\s*\zs\(\S*\)/\=repeat(" ", len(submatch(1)))/g
      
      请参见
      :help:s
      :help submatch()
      :help repeat()

    • 这里有一个更简单的宏:

      :%normal WvEr <-- there's a space after the 'r'
      

      :%normal-w如果之后没有任何内容,则不必在模式末尾添加
      \ze
      normal
      cmd不正确,应该是
      :%normal WvEr
      @脑膜-メネンックス, 已修复。如果之后没有任何内容,则不必在模式末尾添加
      \ze
      normal
      cmd不正确,应该是
      :%normal WvEr
      @脑膜-メネンックス, 固定的。