这篇博文提供了一种使用 Vim 和svn diff
. 不幸的是,Vim 不理解左侧的文件类型,所以没有语法高亮。解决这个问题的最简单/最好的方法是什么?
6 回答
将以下代码添加到~/.vim/filetype.vim
:
" 只加载文件类型一次 如果存在(“did_load_filetypes”) 结束 万一 augroup 文件类型检测 " 当触发 BufRead 或 BufNewFile 事件时,弹出 .svn-base 扩展名并 " 手动重启文件类型自动命令 自动命令!BufRead *.svn-base 执行 'doautocmd filetypedetect BufRead' 。展开('%:r') 自动命令!BufNewFile *.svn-base 执行 'doautocmd filetypedetect BufNewFile' 。展开('%:r') augroup 结束
正如评论所述,此代码将拾取.svn-base
文件并尝试找出最终没有该扩展名的文件类型。
:help 新文件类型 :help :doautocmd :帮助展开()
当我在带有 .txt 后缀的文件中使用重组文本时,默认情况下,vim 不会突出显示文本。所以我把它放在我文件的顶部:
.. vim: set filetype=rst :
然后 vim 会做所有可爱的语法高亮。
尝试将模式行添加到文件的第一行,然后查看 vim 是否在您执行 diff 时执行您想要的操作。
顺便说一句,那是你链接到的我的博客!我能拿奖吗?
基于太多 php 的答案,即使文件扩展名不在 svn 文件名中,这也有效。假设您使用 svn-base 作为第一个参数并使用工作副本作为第二个参数运行 vimdiff:
autocmd! BufRead *.svn-base if &diff && argc() == 2 |
\ execute 'doautocmd filetypedetect BufRead '.argv(1) |
\ endif
autocmd! BufNewFile *.svn-base if &diff && argc() == 2 |
\ execute 'doautocmd filetypedetect BufNewFile '.argv(1) |
\ endif
快速搜索“vim set filetype”给了我这个链接,它向你展示了如何通过稍微改变 .vimrc 来让这个工作“永远”。如果你只是被一个文件卡住了一次,并且你知道它的“正确”文件类型,你可以尝试(从左侧文件):
:set filetype=XXX
其中XXX是适当的格式(例如 python、c 等)
看看
:help filteype
也可能会有所帮助
就好像 vimdiff 是使用以下命令调用的,
vimdiff .svn/text-base/foo.php.svn-base foo.php
所以您会看到,vim 无法将 lhs 文件的文件类型识别为 php,因为扩展名不同。
我不知道合适的解决方案。我在不同的场景中使用这样的东西,但这只会修复语法突出显示:
au BufReadPost *.php.svn-base set syntax=php
你也可以试试:
au FileType *.php.svn-base set filetype=php
但我无法测试,因为我已:filetype
禁用。这应该覆盖文件的文件类型检测.php.svn-base
并将其映射到所需的php
. 我已经检查过它是否覆盖了'filetype'
and 'syntax'
::set filetype?
并:set syntax?
产生了预期的输出。
使用GVim 8.0 作为 Windows 10 上 TortoiseSVN 1.9.7 的差异查看器,我发现 GVim 正确识别 php 文件扩展名并完美显示语法突出显示。