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

时间:2015-03-21 18:12:09

标签: vim text-editor

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

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

上的vim引用
  
      
  1. 每个窗口都有一个单独的跳转列表。最大条目数固定为100。

  2.   
  3. 拆分窗口时,跳转列表将被复制到新窗口。

  4.   

我实际上已经尝试了几个实验来确认第二点;当您创建新窗口(拆分窗口,创建新选项卡等)时,原始窗口的跳转列表将复制到新窗口。

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

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

这一直是真的,还是有例外?

谢谢, 阿伦

1 个答案:

答案 0 :(得分:2)

您的观察是正确的。这是在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, '-', '\'');
}

curwinsrc/globals.h中定义:

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

因此,它确实使用了当写入viminfo文件时/当Vim退出时当前窗口中的跳转列表。