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

时间:2015-03-01 03:10:17

标签: vim vim-plugin

我在使用Vim编写的以下脚本时遇到问题(由Yichao Zhou();来源:http://www.vim.org/scripts/script.php?script_id=4021)。问题分解为与Vim中的mkviewloadview相关的详细信息。

通过Vundle安装此插件时,我无法将fdmformatoptions设置为一些新值。此插件不仅会恢复以前的观看次数,还会恢复fdmformatoptions的设置。

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

因此,根据下面列出的代码,它在哪里编写"视图"至?我想去那里删除所有旧的,希望使这个插件恢复正常。 (即适应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

2 个答案:

答案 0 :(得分:1)

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

检查价值
:set viewdir?

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

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

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

答案 1 :(得分:0)

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

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

    set viewoptions=cursor,folds,slash,unix

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

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

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

  3. 请注意,当Vim对viewdir的规范感到困惑时,它会开始将一些奇怪命名的文件保存到与“查看”文件相同的文件夹中。例如,在编辑_vimrc并退出时,此类“视图”文件将在同一目录中找到,命名为(对于我的情况):C=-=+vim=+_vimrc=。这只能在正确指定viewdir时解决。

    要“刷新”存储的视图,只需删除viewdir中的所有内容即可。