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 - Fatal编程技术网

Vim 如何从两列之间的所有行中删除文本?

Vim 如何从两列之间的所有行中删除文本?,vim,Vim,我想删除两列之间所有行的内容。我该怎么做 例如,我想要这个: abcdefg hijklmn opqrstu 如果删除第3列到第5列之间的文本,则变为: abfg himn optu 将光标定位在d中,然后按Ctrl-V、l、G和d 进入视觉块模式 l将视觉选择向右扩展一个字符 将所选内容展开到最后一行 d删除所选内容 对于自发编辑,我会通过CTRL-V(通常在Windows上映射到CTRL-Q)使用分块视觉模式,然后d删除它 如果您经常这样做,对于大范围/整个缓冲区,或者重复这样做,我会

我想删除两列之间所有行的内容。我该怎么做

例如,我想要这个:

abcdefg
hijklmn
opqrstu
如果删除第3列到第5列之间的文本,则变为:

abfg
himn
optu

将光标定位在d中,然后按Ctrl-V、l、G和d

  • 进入视觉块模式
  • l
    将视觉选择向右扩展一个字符
  • 将所选内容展开到最后一行
  • d
    删除所选内容

    • 对于自发编辑,我会通过CTRL-V(通常在Windows上映射到CTRL-Q)使用分块视觉模式,然后
      d
      删除它

      如果您经常这样做,对于大范围/整个缓冲区,或者重复这样做,我会使用一个替换,它在虚拟列中开始匹配,并扩展(向上)到结束列,例如:

      %s/\%3v.*\%<7v//
      

      %s/\%3v.\%您可以使用搜索和替换:

      :%s/..\zs...\ze
      
      或者以更一般的形式:

      :%s/.\{2}\zs.\{3}\ze
      
      其中,第一个数字(2)是该列的索引(从零开始),第二个数字(3)是该列的字符数

      说明:

      :%s/
      在整个缓冲区中搜索并替换

      \{2}\zs
      在此处查找两个字符并设置匹配的开头

      \{3}\ze
      在此处查找三个字符并设置匹配结束

      由于要删除匹配项,请忽略替换字符串


      你的问题和我的很相似

      要删除文件中所有行的第3列到第5列,请执行以下操作:

      :%normal 3|d6|
      
      要删除特定的行间隔(80到90),请使用以下命令:

      :80,90normal 3|d6|
      
      如果您不熟悉普通命令或|“运动”,可以快速解释:

    • normal
      命令在normal模式下执行以下命令
    • |“运动”将光标移动到指定列,因此
      3 |
      将光标移动到第三列
    • 然后我删除所有内容(
      d
      ),直到第五列(
      6 |

    • 我会用以下方法:

      :%s/^..\zs.*\ze..$//g
      

      这将删除除开头的前两列和结尾的两列之外的所有内容。

      对于所有行,或仅针对当前行?对于所有行,我还想知道关于第80行到第90行,我用一个示例更新了您的问题。你能确定它是准确的吗?你关心的数字是不相关的。最好先做
      G
      ,然后再做
      l
      ,因为如果
      G
      让你空行,你可能需要重做
      l
      G
      将选择扩展到文件的底部和左侧。因此,在最初的示例中,所有字符都将移到左侧。相反,您需要使用
      l
      键来确保突出显示的区域是要删除的区域。您的解决方案是基于字符的,而不是基于列的。对于双幅(例如中文)字符和不可打印的字符(如^P(CTRL-P))来说,这有所不同。@IngoKarkat你说得对。我没有看完你的全部答案(看完CTRL-V后我停了下来)+谢谢你的回答。