如何使vim恢复当前缓冲区的最后一个光标位置?

如何使vim恢复当前缓冲区的最后一个光标位置?,vim,neovim,Vim,Neovim,由于某些原因,vim不保存当前缓冲区的光标位置。例如,如果我打开了3个缓冲区(选项卡) 如果选择了“栏”,则在退出时,vim会将光标位置保存到“foo”和“foobar”标记处,而不是“bar”“。无论是否有其他缓冲区,退出前它始终是当前选定的缓冲区。下面是一个示例,演示了在我关闭vim会话后,~/.local/share/shada/main.shada文件的外观: Local mark with timestamp 2019-07-27T21:29:30: % Key Desc

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

如果选择了“栏”,则在退出时,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。当我强制vim使用命令
m”
将光标位置显式保存到
标记时,此信息在退出时丢失。不知道从何处开始

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

shada=!,'10,/100,:100,问题是由我使用的会话管理器引起的。更具体地说,这一行

autocmd VimLeavePre * execute s:isActiveSession() && s:saveSession()
我将此事件替换为
vimleeve
,该事件在写入
shada
文件后调用

autocmd VimLeave * execute s:isActiveSession() && s:saveSession()
UPD:为了追求更小的代码库,我忘记了有移动光标的
:n
命令。无论表达式的计算结果如何,光标都会放在第一行(
:0
的工作原理与
:1
)相同。因此,我应该编写另一个函数或用以下函数替换它

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

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

autocmd VimLeavePre * execute s:isActiveSession() && s:saveSession()
我将此事件替换为
vimleeve
,该事件在写入
shada
文件后调用

autocmd VimLeave * execute s:isActiveSession() && s:saveSession()
UPD:为了追求更小的代码库,我忘记了有移动光标的
:n
命令。无论表达式的计算结果如何,光标都会放在第一行(
:0
的工作原理与
:1
)相同。因此,我应该编写另一个函数或用以下函数替换它

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

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