2010-07-24 3 views
3

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

+1

Что такое тип файла в левой части файла? вы можете найти файл синтаксиса для него на vim.org? – michaelmichael

+0

скриншот? или, по крайней мере, имена файлов? – Dummy00001

+0

например: это как если бы vimdiff был вызван с помощью следующей команды vimdiff .svn/текст-основа/foo.php.svn база foo.php так что вы видите, ВИМ не распознает тип файла файла LHS как php из-за разного расширения. – user400978

ответ

3

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

.. vim: set filetype=rst : 

И тогда vim делает все симпатичные выделения синтаксиса.

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

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

+0

Это тоже работает, спасибо Мэтью. Решение, данное «слишком много php», работает, конечно, но я считаю, что это хорошая практика и не зависит от расширения файла. – user400978

0

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

:set filetype=XXX 

где XXX является соответствующий формат (например, Python, C и т.д.)

взгляд на

:help filteype 

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

+0

Боюсь, что нет. Тип файла в левой части будет , то есть он зависит от имени файла правой части. – user400978

+0

Я понимаю, что вы имеете в виду, но я предложил вам «заставить руку vim» понять левую сторону, это другой тип файла. Я сделал это: эхо «время импорта»> 1.py эхо «время импорта»> файле 2.cpp теперь слева от входа, набрав : набор Filetype показывает: Filetype = питона на РИТ это показывает : filetype = cpp , но я могу заставить rhs использовать: : set filetype = python Надеюсь, что это поможет. –

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' и 'syntax': :set filetype? и :set syntax? производят ожидаемый выход.

8

Добавьте следующий код ~/.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 файлы и попытаться выяснить, что Filetype бы без этого расширения на конце.

 
:help new-filetype 
:help :doautocmd 
:help expand() 
+0

Работает! Спасибо. – user400978

0

Основываясь на слишком большом ответе php, это работает даже в том случае, если расширение файла не указано в имени файла svn.Предполагая, что вы запустите 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 
Смежные вопросы