我正在使用http://www.thegeekstuff.com/2008/12/vi-and-vim-autocommand-3-steps-to-add-custom-header-to-your-file/中建议的解决方案(修改后的版本)来自动创建和更新源代码的标头。
如上述页面所述,在 _ = IOSPublicDefaultAlert.init(viewController: self, alertTitle: "Warning!!!", alertMessage: alertMessage, actionTitleAndType: ["Ok" : .destructive, "Cancel" : .default], actionCompletion: { [unowned self] (title) in
if title == "Ok"{
}
})
中调用write
命令后,将执行以下命令序列:
这很好,但有一个令人讨厌的问题:假设我们正在编辑靠近窗口底部的一条线。如果在那时我们保存文件,因为光标移动(用于更新标题)我们正在编辑的行跳转,以便它位于窗口的中间。
根据我的理解vim
将光标移动到标记为'a
的地方,并调整窗口内容,使当前行显示在窗口中间。我想知道是否有办法让“标记”记住窗口中标记线的确切相对位置,并在跳回标记时保持这个位置?
答案 0 :(得分:2)
它位于文档中:Restoring the cursor position。
lexer
(我用省略号跳过了不相关的部分)。
:map <F2> msHmt…'tzt`s
打破恢复位置:
ms store cursor position in the 's' mark
H go to the first line in the window
mt store this position in the 't' mark
答案 1 :(得分:1)
标记本身只存储位置本身;视图(当前窗口中显示的内容)不是其中的一部分。
您正在寻找的是winsaveview()
和winrestview()
对功能。这些存储光标位置(如标记,但不会自动适应缓冲区中的更改;更新标题可能不需要的内容),以及窗口中当前显示的内容的详细信息。推荐使用这些标记;在自定义映射或命令中,它还具有不破坏标记的好处。
如果您使用:substitute
更新标头,您还可以更改当前搜索模式(除非使用:function
)和搜索历史记录。撤消所有这些很难;我知道,因为我自己写了这样一个插件(AutoAdapt plugin)。您可能希望查看其实现以获取更多提示(或者完全开始使用它)。 (该插件页面还包含各种替代插件的链接。)