如何防止vim替换移动光标

时间:2014-05-14 08:52:28

标签: vim

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

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

我正在使用搜索/替换功能来完成这个技巧。

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

有没有人知道在更新日期时阻止vim跳跃的方法,或者至少让它跳回到之前的位置?

2 个答案:

答案 0 :(得分:2)

互动地,您可以使用<C-O>或更改标记``移回原始位置,如vim replace all without cursor moving所示。

在Vimscript中,特别是当每个缓冲区写入运行时,我会包装代码:

let l:save_view = winsaveview()
    %substitute///
call winrestview(l:save_view)

以前的移动命令可能仍会影响窗口视图(即视口中显示的确切行和列),而此解决方案可以恢复所有内容。

奖金

另请注意,{pattern}中使用的:substitute会添加到搜索记录中。为避免这种情况,请附加

call histdel('search', -1)

(当您在:function中拥有此搜索模式时,搜索模式本身并未受到影响。)

或使用Vim 8中引入的:keeppatterns命令:

keeppatterns %substitute///

相关插件

我在AutoAdapt plugin中实现了类似的功能。你也会看到那里使用的所有技巧。

答案 1 :(得分:0)

我的import wrds db = wrds.Connection() libraries = db.list_libraries() library = 'compg' tables = db.list_tables(library=library) table = 'g_company' result = db.raw_sql('select * from COMPG.G_COMPANY') 上有一个类似的功能,我刚刚在其上添加了~/.vimrc Co ,以便在函数执行更改后跳回我当前的位置。

normal