SVN diff с vim, но с правильным типом файла - PullRequest
3 голосов
/ 24 июля 2010

В этом блоге представлен простой способ использования Vim с svn diff.К сожалению, Vim не понимает левый тип файла, поэтому нет подсветки синтаксиса.Какой самый простой / лучший способ решить эту проблему?

Ответы [ 6 ]

8 голосов
/ 27 июля 2010

Добавьте следующий код к ~/.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

Как указано в комментариях, этот код будет подбирать .svn-base файлов и пытаться выяснить, каким будет тип файла без этого расширения в конце.

:help new-filetype
:help :doautocmd
:help expand()
3 голосов
/ 26 июля 2010

Когда я использую реструктурированный текст в файле с суффиксом .txt, по умолчанию vim не выделяет текст.Поэтому я помещаю это в начало моего файла:

.. vim: set filetype=rst :

А затем vim делает всю симпатичную подсветку синтаксиса.

Попробуйте добавить моделину в первую строку ваших файлов и затем посмотритеесли vim делает то, что вы хотите, когда вы делаете diff.

Кстати, это мой блог, на который вы ссылаетесь!Могу ли я получить приз?

0 голосов
/ 06 декабря 2017

Используя GVim 8.0 в качестве средства просмотра различий для TortoiseSVN 1.9.7 в Windows 10 , я обнаружил, что GVim правильно распознает расширение файла php и отлично отображает подсветку синтаксиса.

0 голосов
/ 29 августа 2014

Опираясь на слишком много ответов php, это работает, даже если расширение файла отсутствует в имени файла svn.Предполагается, что вы запускаете vimdiff с svn-base в качестве первого аргумента и рабочей копией в качестве второго:

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
0 голосов
/ 26 июля 2010

как будто 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? дают ожидаемый результат.

0 голосов
/ 25 июля 2010

быстрый поиск "vim set filetype" дал мне эту ссылку , которая показывает вам, как сделать эту работу "навсегда", немного изменив .vimrc. Если вы просто застряли с файлом один раз и знаете его «правильный» тип файла, вы можете попробовать (из файла с левой стороны):

:set filetype=XXX

, где XXX - соответствующий формат (например, python, c и т. Д.)

взгляд на

:help filteype 

может также немного помочь

...