Vim 从每行的每个文件路径中提取文件名并添加到其旁边

Vim 从每行的每个文件路径中提取文件名并添加到其旁边,vim,Vim,给定文件中的文本: /home/dir1/file1.txt /home/dir2/file2.txt ... /home/dirn/filek.txt 我希望它是以下文本: /home/dir1/file1.txt file1 /home/dir2/file2.txt file2 ... /home/dirn/filek.txt filek 我可以在vim中写这个吗?这个正则表达式可以工作: :%s#.*/\(.*\)\.txt$#& \1# 开始的*/跳过所有内容,直到最后一个

给定文件中的文本:

/home/dir1/file1.txt
/home/dir2/file2.txt
...
/home/dirn/filek.txt
我希望它是以下文本:

/home/dir1/file1.txt file1
/home/dir2/file2.txt file2
...
/home/dirn/filek.txt filek
我可以在vim中写这个吗?

这个正则表达式可以工作:

:%s#.*/\(.*\)\.txt$#& \1#
开始的
*/
跳过所有内容,直到最后一个斜杠(它是贪婪的,所以它将捕获所有目录部分。)

然后我们用
\(.*\)
捕获组中的文件名

最后,我们将扩展名与
\.txt
匹配,并将其锚定到行的末尾

对于替换,我们使用
&
保留完整路径,然后添加
\1
以仅包含文件名

我们可以使用
#
作为分隔符,因此不需要转义
/
s。我们这里只有一个,但是当涉及到路径时,这是一个有用的技术,所以我要确保在这里使用它以保持一致性

您可能想了解更多关于可用于搜索和替换的Vim正则表达式的信息


(一般来说,VIM文档很好,如果你知道如何导航,帮助系统非常有用,请参阅更多。)你可能想考虑VIM上的问题。下次再做。谢谢你的建议。我会紧随其后。再次为解释喝彩。