3

这篇博文提供了一种使用 Vim 和svn diff. 不幸的是,Vim 不理解左侧的文件类型,所以没有语法高亮。解决这个问题的最简单/最好的方法是什么?

4

6 回答 6

8

将以下代码添加到~/.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
:帮助展开()
于 2010-07-27T00:24:42.540 回答
3

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

.. vim: set filetype=rst :

然后 vim 会做所有可爱的语法高亮。

尝试将模式行添加到文件的第一行,然后查看 vim 是否在您执行 diff 时执行您想要的操作。

顺便说一句,那是你链接到的我的博客!我能拿奖吗?

于 2010-07-26T12:31:40.190 回答
0

基于太多 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
于 2014-08-29T19:58:23.710 回答
0

快速搜索“vim set filetype”给了我这个链接,它向你展示了如何通过稍微改变 .vimrc 来让这个工作“永远”。如果你只是被一个文件卡住了一次,并且你知道它的“正确”文件类型,你可以尝试(从左侧文件):

:set filetype=XXX

其中XXX是适当的格式(例如 python、c 等)

看看

:help filteype 

也可能会有所帮助

于 2010-07-25T06:49:48.457 回答
0

就好像 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?产生了预期的输出。

于 2010-07-26T11:03:02.267 回答
0

使用GVim 8.0 作为 Windows 10 上 TortoiseSVN 1.9.7 的差异查看器,我发现 GVim 正确识别 php 文件扩展名并完美显示语法突出显示。

于 2017-12-06T15:09:27.313 回答