在 vim 中,如何(或哪个)跳转列表写入 .viminfo 文件?

In vim, how (or which) jumplist is written to the .viminfo file?

我刚刚开始学习使用 vim,并且已经阅读了一段时间的手册并进行了尝试。

在 [http://vimdoc.sourceforge.net/htmldoc/motion.html#jump-motions][1]

处引用 vim 参考文献
  1. There is a separate jump list for each window. The maximum number of entries is fixed at 100.

  2. When you split a window, the jumplist will be copied to the new window.

我实际上已经尝试了一些实验来证实第二点;当您创建一个新的 window(拆分 window、创建一个新选项卡等)时,原始 window 的跳转列表将复制到新的 window .

由于每个 window 的跳转列表都是独立的,因此每个跳转列表都会根据其特定 window 中使用的跳转命令进行不同的演变。

我的问题是,当需要将跳转列表写入 .viminfo 时,我们打开了几个 windows,每个都有自己不同的跳转列表,哪一个会保存到.viminfo?据我观察,它是 window 中给出退出命令 (:q[!]) 的那个。

是否一直如此,还是有例外?

谢谢, 阿伦

你的观察是正确的。这是在src/mark.c中实现的,函数write_viminfo_filemarks(fp):

/* Write the jumplist with -' */
fputs(_("\n# Jumplist (newest first):\n"), fp);
setpcmark();    /* add current cursor position */
cleanup_jumplist();
for (fm = &curwin->w_jumplist[curwin->w_jumplistlen - 1];
                   fm >= &curwin->w_jumplist[0]; --fm)
{
if (fm->fmark.fnum == 0
    || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL
        && !removable(buf->b_ffname)))
    write_one_filemark(fp, fm, '-', '\'');
}

curwin定义在src/globals.h:

EXTERN win_T    *curwin;    /* currently active window */

因此,它确实使用了来自 window 的跳转列表,该跳转列表在写入 viminfo 文件时/退出 Vim 时是当前的。