文件保存时语法高亮会随机消失

8

我正在使用vim编辑一些Python文件,最近,我保存vim缓冲区后,语法高亮度会偶尔消失。 我尝试过重置syntax onset filetype=python,但都没有用。 我没有任何关于导致这个问题的线索,所以现在我只能提供最少量的诊断信息。 但是有人之前遇到过这种情况吗?或者哪里可能出了问题?


你能发一下你的vimrc吗? - mindvirus
@mdkess 这是相当长的内容,我刚刚将它上传到pastebin上了 http://pastebin.com/dggSfKkX - nye17
@Kevin 插件包括 ack.vim, LaTeX-Box, vim-align, vimroom, Latex-Text-Formatter, vim-colors-solarized, vim-surround, ctrlp.vim, nerdtree, vim-indexed-search, gundo.vim, tComment, vim-markdown, jpythonfold.vim, toggle_words.vim, vim-powerline。 - nye17
1
使用:e命令有帮助吗?我曾经遇到过语法混乱的问题,仅设置filetype是不够的。 - 244an
有趣。确实,:e可以恢复高亮显示 - 但是有没有办法在一开始就避免这个问题?你所说的“混合语法”是什么意思(我的代码是纯Python代码)? - nye17
1
我也遇到了同样的问题,特别是在使用tab键进行完成(llvm)时。接受的答案解决了这个问题。感谢提问者和回答者。 - 0xc0de
4个回答

5
这不是一个解决方案,但在评论中很难编写/阅读。我的意思是,在开始修复自己的 .vimrc 时,我正在玩弄语法/突出显示,这就是为什么我注意到了它。
syntax on / syntax enable 只是准备文件加载的内容(向 BufNewFile / BufRead 添加了很多 au)。因此,如果某个插件在编写文件时搞乱了语法/高亮设置,则必须重新加载文件以使所有“魔法”发生,仅设置 filetype 是不够的。执行 :au BufRead 命令,您将看到启动语法时添加的所有自动命令。但是,必须加载文件才能获取所有设置。参见:syntax-loading
如果您不想重新加载文件,请尝试使用 syntax enable,我认为它与 syntax on 不同。
或者还可以尝试执行 :doautocmd filetypedetect BufRead %,请参见 autocmd-execute
我不知道是什么引起了问题,可能是您吗?如果您添加了一些自动命令或进行自己的颜色/语法设置。
否则,在找到解决方案之前,您可以尝试在 .vimrc 的末尾添加 autocmd BufWritePost * <with the commands above that works>,在这种情况下使用 augroup。以下是一个示例:
augroup myResetSyntax
  au!
  autocmd BufWritePost * syntax enable | doautocmd filetypedetect BufRead "%"
augroup END

在执行 strace -f vim test-file.type 2>/tmp/vim-strace.out 命令期间,我注意到跟踪文件显示在 source $MYVIMRC 命令期间缺少了三个 VIM 文件。初始 Vim 会话期间的文件处理顺序为:/usr/share/vim/vim81/syntax, /usr/share/vim/vim81/ftplugin.vim, $HOME/.vim/ftplugin,啊!!!无法在注释中格式化行。简而言之,在初始启动期间,:scriptnames 的加载顺序与 :source $MYVIMRC 命令期间的加载顺序不同。 - John Greene

4

您也可以通过重新加载缓冲区来恢复语法,方法如下:

:e

2

一段时间后,我意识到不正常的突出显示是由折叠而不是与文件保存相关的神秘力量引起的,因此一个简单的解决方法*是在我的vimrc中加入以下内容:

noremap <F9> <Esc>:syntax sync fromstart<CR>
inoremap <F9> <C-o>:syntax sync fromstart<CR>

当出现问题时,只需按下F9键即可解决。


0

你可以先保存文件

:w

然后使用以下代码刷新缓冲区

:e

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接