在Vim中,如何删除第二列?

分享于 

3分钟阅读

ubuntu

  繁體

问题:

我有一个制表符分隔的文件,如下所示:


name1 verb1 name2 verb2 etc...



我想删除第二列。 我试着编辑这些答案之一,但不熟悉 sedawk,我无法。

谁能帮我?


回答 1:

在vim中,你应该能够使用命令

 
:%s/t[^t]*//



 

("替换"选项卡后面除了"没有任何"选项卡的任何字符以外的零或者多个字符)。 如果文件只有两个列,那么可以使用稍微简单一点的:%s/t.* 或者 :%s/t.*$ 替换第一个选项卡,然后双击any字符up直到行末尾的字符。


回答 2:

如果你不记得这个问题,你可以直接使用 vim视觉块模式,但是如果你不记得它,那么你可以直接使用它。 打开vim并转到列的第一个角点,如下所示:

enter image description here

键入 CTRL-V,你可以移动光标以选择列,这是在中间:

enter image description here

若要结束,请按 G:

enter image description here

这个块似乎是破坏的,因为我们在最后一行空白,只是上一行( 使用向上箭头或者 k ) 看看它。

enter image description here

现在只需按 x 键删除块:

enter image description here


回答 3:

我将使用 cut


cut -f1,3- file.txt> newfile.txt


mv newfile.txt file.txt



在vim中,你可以使用这个作为过滤器,而不是使用 % 来处理第 2行,或者选择你想要的行):

 
:%!cut -f1,3-



 

-f1,3- 表示'打印字段1,后跟字段3 和所有字段,直到行结束'。 默认情况下,cut 使用制表符作为分隔符;如果需要其他选项,请使用 -d 选项( 查看 man cut )。


回答 4:

你可以尝试:

 
:%norm WdW



 

或者手动使用视觉模式:

  • 跳转到第二列( 比如。 按下:W )。
  • 通过Ctrl+v启动可视块。
  • 选择第二列( 比如 )。按以下键: W,G )。
  • 按下按钮删除它。
  • 要在 命令行 中执行该操作,请尝试:

    
    $ ex +':exe":%norm f<Tab>dE"' -scx file
    
    
    
    

    相关:如何为Tab键写入文字以用于运动

    另请参见:

    • 在 vim/gvim中删除指定列,使用Visual模式


COL  VIM  DEL  column  
相关文章