如何删除Vim中的第二列?

我有一个制表符分隔文件,如:

name1 verb1 name2 verb2 etc... 

我想删除第二列。 我尝试编辑其中一个答案 ,但不熟悉sedawk ,我做不到。

谁能帮我?

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

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

(替换TAB后跟零个或多个出现的任何字符,除了TAB ,什么都没有)。 如果您的文件只有两列,您可以使用稍微简单的一点:%s/\t.*:%s/\t.*$替换第一个TAB任何后续字符,直到行尾。

接受的答案比这更优雅(我赞成它!)但如果你不记得它,你可以直接使用vim 视觉块模式 。 打开vim并转到(正常模式)到列的第一个角落,如下所示:

在此处输入图像描述

键入CTRL-V ,您可以移动光标以选择列,这是中途:

在此处输入图像描述

最后,按G

在此处输入图像描述

该块似乎被打破了,因为我们在最后一行是空白的; 只需向上一行(使用向上箭头或k )再次看到它……:

在此处输入图像描述

现在您只需按x即可删除该块:

在此处输入图像描述

我会用cut这个

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

你也可以在vim中使用它作为filter(这将替换文件中的所有行;你也可以使用(例如) 2,9而不是%来处理第2-9行,或者选择你想要的行V ):

 :%!cut -f1,3- 

-f1,3-表示’打印字段1,后跟字段3,所有字段直到行的末尾’。 默认情况下, cut使用制表符作为其分隔符; 如果你需要其他东西,请使用-d选项(参见man cut )。

您可以尝试:

 :%norm WdW 

或手动使用视觉模式:

  1. 跳到第二列(例如按下: W )。
  2. Ctrl + v启动visual-block。
  3. 选择第二列(例如,按: WG )。
  4. d删除它。

要从命令行就地执行此操作,请尝试:

 $ ex +':exe ":%norm f\dE"' -scx file 

相关: 如何为Tab键编写用于运动的文字?

也可以看看:

  • 使用Visual Block模式删除VIM / gvim中的特定列