我大部分时间都在使用 Windows 8,并将其用作gvim -c
sed 的替代品。我认为我可以使用 Cygwin 来获取 sed,但我希望我可以使用 来做到这一点gvim -c
。
我有一个制表符分隔的 .txt 文件目录,其中一些文件具有我想删除的标题(如下所示)。
Definition of the Ultimate Owner :
- minimum percentage that must characterize the path from a subject company up to its Ultimate owner : 25.01%
- At least one of its shareholders must be known and it cannot own more than 25.01%
Mark Company name ...
要在 gvim 会话中删除标题,我会使用d/^Mark
,然后:wq
。但我有数百个这样的标题,所以我想使用gvim -c
和argdo
。我经常用 来做这件事s//
,比如gvim -c "argdo %s/foo/bar/ge | wq" *.tex
。
我的第一个想法是gvim -c "d/^Mark | wq" *.txt
,但这不起作用,因为/
它不是一个 ex 命令。
d/^Mark
是否有可以与gvim -c
and一起使用的ex 等效项argdo
?
答案1
您需要:d[elete]
一个带有范围的命令:
:[fromline],[toline]d
范围不限于绝对行号:也可以使用搜索:
:1,/bar/d
删除第 1 行和包含 的第一行之间的所有行bar
。
以下命令删除从第 1 行到第一行上面一行之间的每一行,以 开头bar
:
:1,/^bar/-1d
假设您之前没有传递其他可以移动光标的命令,我们可以删掉几个字符:
如果范围的第一部分缺失,则假定当前行,因为我们打开了一个新缓冲区,并且我们没有移动光标,我们可以删除
1
,的默认偏移量
-
是1
,因为这是我们使用的偏移量,所以我们1
也可以省略最后一个。命令变为::,/^bar/-d
根据上面的积木构建,以下命令应该可以工作:
$ gvim -c "argdo ,/^Mark/-d | wq" *.txt