如何在vim中搜索和替换最后一次出现的特殊字符

时间:2014-06-07 09:36:00

标签: regex vim

我想实现这个目标:

我想改变这个

./Dir/file_name1/abc.
./Dir/file_name2/def.
./Dir/file_name3/xyz.
./Dir/file_name4/pqr.

./Dir/file_name1/database_file
./Dir/file_name2/database_file
./Dir/file_name3/database_file
./Dir/file_name4/database_file
vim中的

。我是vim中正则表达式的新手,所以请你帮帮我。

5 个答案:

答案 0 :(得分:3)

发出以下前命令:

:%s,[^/]*$,database_file

正则表达式[^/]*$匹配不包含/的最后一部分。

演示:http://asciinema.org/a/10005

答案 1 :(得分:1)

:%s/\(.*\/\).*/\1database_file/

表达式:

\(      # start group 1
  .*    #   anything, up to the end of the line
  \/    #   a forward slash (this backtracks to the last slash on the line)
\)      # end group 1
.*      # anything, up to the end of the line

答案 2 :(得分:1)

一个:normal解决方案,因为找到正确的正则表达式可能需要花费太多时间(尽管这是一种浪费时间的有趣方式):

:%norm $T/Cdatabase_file

答案 3 :(得分:1)

又一个vim技巧和窍门(if has('python')):

:py from vim import current
:py from os.path import dirname, join
:%s/.*/\=pyeval('join(dirname(current.line), "database_file")')/

答案 4 :(得分:0)

 %s/\(\d\)\/\S\+$/\1\/database_file/g

parantheses中的表达式匹配每行的file_name末尾的整数,并将用于反向引用,同时将匹配的部分替换为所需的术语' database_file'