我的脚本中有很多行看起来像:
./run -f abc.txt
./run -f abc1.txt
./run -f abc2.txt
..
..
./run -f abc50.txt
我需要将所有abc*.txt
替换为abc.txt
。在Vim中有没有办法可以做到这一点,我搜索所有abc*.txt
并替换它们?
答案 0 :(得分:5)
你可以这样做:
:%s/abc\d*.txt/abc.txt/g
答案 1 :(得分:2)
我将以多样化的名义添加这种不同的方式,但我认为标准和最简单的方法是@xdazz方法。
:%g/abc/norm!fclvf.hx
当我们使用%g
时,我们将命令应用于与第一个参数匹配的所有行(在本例中为abc
,这意味着所有行都有abc
。 norm!
命令表示执行正常模式下的命令 fc
表示找到字母c
,l
表示向左移动,{{ 1}}启动可视模式,v
找到点,f.
向右走,最后h
删除可视化词。
这种方法的好处在于您可以将复杂的宏应用于选定的行。
答案 2 :(得分:1)
简而言之,请尝试以下方法:(可能需要轻微按摩)%s/abc\d*\.txt/abc\.txt/g
查看此页面以获取更多信息。
http://vim.wikia.com/wiki/Search_and_replace
:%s/foo/bar/g
Find each occurrence of 'foo', and replace it with 'bar'.
:%s/foo/bar/gc
Change each 'foo' to 'bar', but ask for confirmation first.
:%s/\<foo\>/bar/gc
Change only whole words exactly matching 'foo' to 'bar'; ask for confirmation.
:%s/foo/bar/gci
Change each 'foo' (case insensitive) to 'bar'; ask for confirmation.
This may be wanted after using :set noignorecase to make searches case sensitive (the default).