我在单个文件上遇到了一件奇怪的事情。当我以原始名称打开文件时,突出显示会丢失(“:syntax on” 不起作用)。但如果我用另一个名称 cp 该文件并打开它,语法突出显示就会恢复。如果我将副本 mv 回原始文件名,突出显示又会消失。
我无法向您展示图像(因为我的声誉不够高),但我向你保证,如果可以的话,你会清楚地看到文件 a.js 没有突出显示,而 a_copy.js 有。
答案1
您提供的有关您的环境和配置的信息很少,所以我只能帮助您自助。
比较两个不同 JavaScript 文件的以下选项:
:verbose setlocal syntax? filetype?
然后检查列表中:autocmd
是否有任何可能针对有问题的 JavaScript 文件的模式。您是否使用本地 vimrc插件?它也可能影响这一点。
如果所有这些都没有提供线索,请使用以下方法捕获命令序列
:set verbose=20 | edit a.js
并留意影响的命令'syntax'
。
答案2
尝试删除所有已保存的视图(即从 mkview 中删除)。如果我在注销/关闭时没有彻底退出所有 vim,我经常会遇到这个问题。如果您设置了类似
au BufWinLeave ?* mkview
在您的 .vimrc 中,您将自动获得这些视图。正如接受的答案中提到的,您可以使用以下命令找到此文件的位置:
:verbose setlocal syntax? filetype?
答案3
除此以外syntax on
,.vimrc
您可能还需要删除目录中为这个特定文件存储的视图.vim/view
:
$ cd ~/.vim/view
# list all files looking for your particular file
$ ls -lt # | head -10
...
# delete that file
$ rm ...
请注意,文件夹中的文件view/
在文件系统上将具有其完整路径,并/
用 替换=+
。
答案4
这是一个老问题,但由于这种情况已经发生过几次,所以我想我也可以分享我的解决方案。
根据建议,我通过以下方式比较了原件和复印件(带颜色):
:verbose setlocal syntax? filetype?
原来的
syntax=
Last set from /usr/share/vim/vim80/syntax/syntax.vim
filetype=
Last set from ~/.vim/view/~=+Thesis=+thesis.tex=
复制
syntax=tex
Last set from /usr/share/vim/vim80/syntax/syntax.vim
filetype=tex
Last set from /usr/share/vim/vim80/autoload/dist/ft.vim`
对我来说,解决这个问题的方法是:set filetype=tex
(或您正在使用的任何文件扩展名。)我无法准确查明为什么会发生这种情况,但在我看来,它是在删除 .swp 文件后发生的。