如何防止vim替代移动光标

Ant*_*ine 4 vim

我工作的公司对源文件使用特殊的标头,其中包含上次修改的日期。

我编写了一个 vim 脚本,它在每次写入缓冲区时自动更新此日期。

我正在使用搜索/替换功能来实现这一目的。

现在的问题是,替换确实将光标移动到文件的开头,这非常烦人,因为在每次写入缓冲区时,用户都必须手动跳回之前的编辑位置。

有谁知道一种方法可以防止 vim 在更新日期时跳转,或者至少让它跳回之前的位置?

Ing*_*kat 7

交互式地,您可以使用<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 插件中实现了类似的功能。您也会在那里看到所有这些技巧。