【问题标题】:How to make vim restore last cursor position for CURRENT buffer?如何让vim恢复当前缓冲区的最后一个光标位置?
【发布时间】:2019-07-27 18:48:18
【问题描述】:

由于某种原因,vim 不保存当前缓冲区的光标位置。例如,如果我打开了 3 个缓冲区(选项卡)

foo | bar* | foobar

并且选择了“bar”,退出时vim将光标位置保存到"标记“foo”和“foobar”而不是“bar”。退出前始终是当前选中的缓冲区,无论是否有其他缓冲区。以下是我关闭 vim 会话后 ~/.local/share/shada/main.shada 文件的外观示例:

  Local mark with timestamp 2019-07-27T21:29:30:
    % Key  Description  Value
    + f    file name    "/home/damage/tmp/foo"
    + n    name         '"'
    + l    line number  10
    + c    column       0

  Local mark with timestamp 2019-07-27T21:29:30:
    % Key  Description  Value
    + f    file name    "/home/damage/tmp/bar"
    + n    name         '"'
    + l    line number  1
    + c    column       0

  Local mark with timestamp 2019-07-27T21:29:30:
    % Key  Description  Value
    + f    file name    "/home/damage/tmp/foobar"
    + n    name         '"'
    + l    line number  20
    + c    column       0

当前缓冲区的标记" 始终为1。当我使用命令m" 强制vim 将光标位置显式保存到" 标记时,此信息会在退出时丢失。不知道从哪里开始。

shada=!,'10,/100,:100,<0,@1,f1,h,s1,%10

【问题讨论】:

  • 读者注意:shada 是一个 nvim-ism 替代 viminfo 文件。它们相似但不同。 shada 控制保存的内容,f1 表示保存所有标记。
  • OP:你考虑过在 neovim 的 github 上提交 issue 吗?
  • 我想我可以。我以为我的文档有问题,因为shada 选项中有很多设置。你的 vim 配置是否保存了光标位置?
  • 是的:在 github 上查看我的 Dotfiles。我是我的 vimrc,我 set viminfo+=f1。然后我使用自动命令恢复光标位置(在 plugin/lastpos.vim 中)。
  • 感谢您的配置。我的设置也因 vim 失败,所以我会先尝试使用您的配置对其进行测试。

标签: vim neovim


【解决方案1】:

问题是由我使用的会话管理器引起的。更具体地说,这一行。

autocmd VimLeavePre * execute s:isActiveSession() && s:saveSession()

我用VimLeave 替换了这个事件,它在shada 文件写入后调用。

autocmd VimLeave * execute s:isActiveSession() && s:saveSession()

UPD:为了追求更小的代码库,我忘记了移动光标的:n 命令。无论计算表达式的结果是什么,光标都将放在第一行(:0:1 的作用相同)。所以我应该写另一个函数或者用下面的替换它。

autocmd VimLeave * if s:isActiveSession() | call s:saveSession() | endif

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多