svn与vim不同,但文件类型正确
提供了一种将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
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