我正在使用以下正则表达式来匹配Clojure函数定义下的文档字符串:
\vdefn.*\n\s*\zs"([^"]|\n)*"
有没有办法gq
在给定文件中此模式的所有匹配项上运行正常模式(格式行)命令?
我正在使用以下正则表达式来匹配Clojure函数定义下的文档字符串:
\vdefn.*\n\s*\zs"([^"]|\n)*"
有没有办法gq
在给定文件中此模式的所有匹配项上运行正常模式(格式行)命令?
Answers:
的力量g
:
:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq
/
s 之间的部分是不言自明的,因为它是您原始问题中的正则表达式。
normal gngq
最后有点有趣。gn
会选择正则表达式的下一个匹配项,并且gq
当然会格式化此选择项(如您在问题中提到的)。
:g
是最重要的部分。在我看来,这是Vim最有用的功能之一。该g
ex命令需要一个正则表达式和Ex命令,并在每一行执行命令正则表达式匹配。如果您还没有了解:g
,我强烈建议您这样做,因为它将大大提高您的生产率。Vim拥有一些资源:help :g
或Vim Wiki上的g的力量。
//s<cr>V
。运行时:normal V
,按预期方式进入视线模式。如我所料,当我运行:normal //s<cr>
光标时,光标会落在"
比赛的第一场。我跑步时:normal //s<cr>V
没有视觉选择。
gn
片段是从V
触发的行中选择到下一个(不是同一行中的)模式出现。Vim的文档指出,如果可视模式处于活动状态,则选择将从当前行扩展到下一个模式。这会导致不良行为。