svn与vim不同,但文件类型正确

svn与vim不同,但文件类型正确,svn,vim,file-type,Svn,Vim,File Type,提供了一种将Vim与svn diff一起使用的简单方法。不幸的是,Vim不理解左侧文件类型,因此没有语法突出显示。解决这个问题最简单/最好的方法是什么?我快速搜索了一下“vim set filetype”,它向您展示了如何通过稍微更改.vimrc来“永远”工作。 如果您只使用了一次文件,并且知道它的“正确”文件类型,您可以尝试(从左侧文件): 其中XXX是适当的格式(例如python、c等) 看 :help filteype 可能也有点帮助 就好像调用vimdiff时使用了以下命令vimdi

提供了一种将Vim与
svn diff
一起使用的简单方法。不幸的是,Vim不理解左侧文件类型,因此没有语法突出显示。解决这个问题最简单/最好的方法是什么?

我快速搜索了一下“vim set filetype”,它向您展示了如何通过稍微更改.vimrc来“永远”工作。 如果您只使用了一次文件,并且知道它的“正确”文件类型,您可以尝试(从左侧文件):

其中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'
'syntax'
:set filetype?
:set syntax?
生成预期输出。

当我在带有.txt后缀的文件中使用重构文本时,默认情况下,vim不会突出显示文本。所以我把它放在我的文件的顶部:

.. vim: set filetype=rst :
然后vim做所有可爱的语法高亮显示

尝试将modeline添加到文件的第一行,然后查看vim在执行diff时是否满足您的要求


顺便说一句,你链接到的是我的博客!我可以获得奖品吗?

将以下代码添加到
~/.vim/filetype.vim

" only load filetypes once if exists("did_load_filetypes") finish endif augroup filetypedetect " when BufRead or BufNewFile event is triggered, pop off the .svn-base extension and " manually restart filetype autocommands autocmd! BufRead *.svn-base execute 'doautocmd filetypedetect BufRead ' . expand('%:r') autocmd! BufNewFile *.svn-base execute 'doautocmd filetypedetect BufNewFile ' . expand('%:r') augroup END
基于太多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

通过使用,我发现GVim能够正确识别php文件扩展名,并完美地显示语法高亮显示。

左侧文件的文件类型是什么?你能在vim.org上找到它的语法文件吗?屏幕截图?或者至少是文件名?例如:好像vimdiff是通过以下命令调用的:vimdiff.svn/text base/foo.php.svn-base foo.php。因此,由于扩展名不同,vim无法将lhs文件的文件类型识别为php。恐怕不行。左侧文件的文件类型将取决于右侧文件名。我明白你的意思,但我建议你“强迫vim的手”理解左侧是不同的文件类型。我这样做了:echo“import time”>1.py echo“import time”>2.cpp现在在左手边键入:set filetype shows:filetype=python在rhs上显示:filetype=cpp,但我可以通过使用::set filetype=python强制rhs,希望这会有所帮助。这也很有效,谢谢Matthew。“太多php”给出的解决方案当然有效,但我认为这是一个很好的实践,并且独立于文件扩展名。 :help new-filetype :help :doautocmd :help expand()
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