在vim中搜索并替换选定的文件路径

在vim中搜索并替换选定的文件路径,vim,replace,Vim,Replace,我经常处理内部充满文件路径的文件。我希望能够在可视化模式下快速选择我的文件路径,并将其替换为其他文件路径 例如,我有这样的文件: balvadsd /mnt/Windows/Documents\ and\ Settings/stuff/file.exe blablabalba albla /mnt/Windows/Documents\ and\ Settings/stuff/file.exe bla2 vslva 21 stuff foo bar dsad /mnt/Windows/Docum

我经常处理内部充满文件路径的文件。我希望能够在可视化模式下快速选择我的文件路径,并将其替换为其他文件路径

例如,我有这样的文件:

balvadsd /mnt/Windows/Documents\ and\ Settings/stuff/file.exe blablabalba albla
/mnt/Windows/Documents\ and\ Settings/stuff/file.exe bla2 vslva 21 
stuff foo bar dsad /mnt/Windows/Documents\ and\ Settings/stuff/file.exe 
我需要

搜索所有出现的/mnt/Windows/Documents\和\Settings/stuff/file.exe 将我的路径/mnt/Windows/Documents\和\Settings/stuff/file.exe替换为其他路径。棘手的是,像这样的解决方案由于斜杠、反斜杠和圆点而不适用于文件路径。
您可以使用任何其他单字节字符,而不是字母数字字符“\”、“”或“|”,而不是替换命令体中的斜杠。在这个例子中@


%s@/mnt/Windows/Documents\\@/some/other/path

代替替换命令体中的斜杠,您可以使用任何其他单字节字符,但不能使用字母数字字符“\”、”或“|”。在这个例子中@


%s@/mnt/Windows/Documents\\@/some/other/path

您可以使用\来转义正则表达式元字符。所以foo/bar变成了正则表达式的foo\/bar。或者你可以使用不同的分隔符,比如。然而,你仍然需要逃离。。你可以避免逃跑。和其他正则表达式元字符,使用\V表示非常不规则。使用\V意味着现在必须转义所有正则表达式元字符,这意味着非转义的特许符与其文本本身匹配

:%s#\V/mnt/Windows/Documents\ and\ Settings/stuff/file.exe#replacement#g
然而,所有的逃避都会变得烦人。我通常使用可视星图和/或。这意味着我可以直观地选择文本,然后按*。然后您只需执行:%s//替换/或:%s替换即可进行替换

尼尔·德鲁(Neil Drew)的一些精彩剧集谈到了这一点:

. 您可以通过gn运动和。命令请参阅以下vimcast插曲:

有关更多帮助,请参阅:

:h /\V
:h gn

可以使用\来转义正则表达式元字符。所以foo/bar变成了正则表达式的foo\/bar。或者你可以使用不同的分隔符,比如。然而,你仍然需要逃离。。你可以避免逃跑。和其他正则表达式元字符,使用\V表示非常不规则。使用\V意味着现在必须转义所有正则表达式元字符,这意味着非转义的特许符与其文本本身匹配

:%s#\V/mnt/Windows/Documents\ and\ Settings/stuff/file.exe#replacement#g
然而,所有的逃避都会变得烦人。我通常使用可视星图和/或。这意味着我可以直观地选择文本,然后按*。然后您只需执行:%s//替换/或:%s替换即可进行替换

尼尔·德鲁(Neil Drew)的一些精彩剧集谈到了这一点:

. 您可以通过gn运动和。命令请参阅以下vimcast插曲:

有关更多帮助,请参阅:

:h /\V
:h gn

我不理解你在视觉上选择文本然后按*的部分。我已在可视模式下选择了文件路径,并按了*。似乎*只适用于文件路径中的一个字,而不适用于整个文件路径。刚刚扩展了视觉模式选择。你到底是如何使用它的?@ganqwerty我想你错过了我使用映射或插件的部分。这是我过去使用过的一个映射:xnoremap*:let@/=@gvy:let[@/,@]=[@,@/]/\V=substituteescape@/,“\”,“/”,“\”,“\=\\%d.char2nrsubmatch0”,“g”,但是我更喜欢使用插件路径。我不理解您在视觉上选择文本然后按*的部分。我已在可视模式下选择了文件路径,并按了*。似乎*只适用于文件路径中的一个字,而不适用于整个文件路径。刚刚扩展了视觉模式选择。你到底是如何使用它的?@ganqwerty我想你错过了我使用映射或插件的部分。这是我过去使用过的一个映射:xnoremap*:let@/=@gvy:let[@/,@]=[@,@/]/\V=substituteescape@/,“\”,“/”,“\=\\%d.char2nrsubmatch0”,“g”,但是我更喜欢使用插件路径