我工作的公司对源文件使用特殊的标头,其中包含上次修改的日期。
我编写了一个 vim 脚本,它在每次写入缓冲区时自动更新此日期。
我正在使用搜索/替换功能来实现这一目的。
现在的问题是,替换确实将光标移动到文件的开头,这非常烦人,因为在每次写入缓冲区时,用户都必须手动跳回之前的编辑位置。
有谁知道一种方法可以防止 vim 在更新日期时跳转,或者至少让它跳回之前的位置?
交互式地,您可以使用<C-O>或更改标记``移回到原始位置,如vim Replace all withoutcursor moving所示。
在 Vimscript 中,特别是当它在每次缓冲区写入时运行时,我将包装代码:
let l:save_view = winsaveview()
%substitute///
call winrestview(l:save_view)
Run Code Online (Sandbox Code Playgroud)
以前的移动命令可能仍然会影响窗口视图(即视口中显示哪些确切的行和列),而此解决方案会按原样恢复所有内容。
另外,请注意,{pattern}中使用的:substitute会添加到搜索历史记录中。为了避免这种情况,请附加
call histdel('search', -1)
Run Code Online (Sandbox Code Playgroud)
(当您将其放在 中时,搜索模式本身不会受到影响:function。)
或者使用:keeppatternsVim 8 中引入的命令:
keeppatterns %substitute///
Run Code Online (Sandbox Code Playgroud)
我在我的AutoAdapt 插件中实现了类似的功能。您也会在那里看到所有这些技巧。