"mkview" 是否保留 `fdm` 和 `formatoptions` 的记录?如果是这样,如何刷新它?

Does "mkview" keep a record of `fdm` and `formatoptions`? If so, how to refresh it?

我在使用 Vim 中编写的以下脚本时遇到问题(by Yichao Zhou ();来源:http://www.vim.org/scripts/script.php?script_id=4021)。该问题分解为 Vim.

中与 mkviewloadview 相关的详细信息

当通过 Vundle 安装此插件时,我无法将 fdmformatoptions 设置为一些新值。这个插件不仅可以恢复以前的视图,还可以恢复 fdmformatoptions.

的设置

检查代码(附在末尾)后,我认为不应该发生任何奇怪的事情。最终调用的唯一函数是 mkviewloadview.

那么,根据下面列出的代码,它会将 "views" 写入何处?我想去那里删除所有旧的东西,希望能让这个插件恢复正常。 (即适应 fdmformatoptions 的新规范。)

谢谢。

if exists("g:loaded_restore_view")
    finish
endif
let g:loaded_restore_view = 1

if !exists("g:skipview_files")
    let g:skipview_files = []
endif

function! MakeViewCheck()
    if &l:diff | return 0 | endif
    if &buftype != '' | return 0 | endif
    if expand('%') =~ '\[.*\]' | return 0 | endif
    if empty(glob(expand('%:p'))) | return 0 | endif
    if &modifiable == 0 | return 0 | endif
    if len($TEMP) && expand('%:p:h') == $TEMP | return 0 | endif
    if len($TMP) && expand('%:p:h') == $TMP | return 0 | endif

    let file_name = expand('%:p')
    for ifiles in g:skipview_files
        if file_name =~ ifiles
            return 0
        endif
    endfor

    return 1
endfunction

augroup AutoView
    autocmd!
    " Autosave & Load Views.
    autocmd BufWritePre,BufWinLeave ?* if MakeViewCheck() | silent! mkview | endif
    autocmd BufWinEnter ?* if MakeViewCheck() | silent! loadview | endif
augroup END

:mkview命令默认使用'viewdir'位置;您可以通过

检查值
:set viewdir?

您无法更改选项的原因是 'viewoptions' 的默认值包含 options,IMO 是一个错误的默认值(除非您经常以交互方式切换,并且确实想要记录)。您可以通过

解决这个问题
:set viewoptions-=options

在你的 ~/.vimrc 中。当然,当前存储的视图仍然包含它,因此您也需要清理它们。

感谢Ingo的建议和Yichao(插件作者)的帮助,问题已通过以下步骤解决:

  1. _vimrc中,将viewoptions的设置指定为:

    set viewoptions=cursor,folds,slash,unix

  2. 指定 viewdir, 不带 任何字符串标记(不得有任何引号,"').我的viewdir已指定如下:

    set viewdir=C:\Users\llinfeng\Onedrive\Vim-document\ViewFiles

    或者,可以将 viewdir 保留为默认值。

请注意,当 Vim 对 viewdir 的规范感到困惑时,它会开始将一些奇怪的命名文件保存到与 "making a view of" 相同的文件夹中。例如,在编辑 _vimrc 并退出时,将在同一目录中找到这样的 "view" 文件,名称(对于我的情况)为:C=-=+vim=+_vimrc=。这只有在正确指定 viewdir 时才能解决。

对于 "refreshing" 存储的视图,只需删除 viewdir 中的所有内容即可。