2010-07-24 12 views
3

This blog post給出了一個簡單的方法來使用Vim與svn diff。不幸的是,Vim不理解左側的文件類型,所以沒有語法高亮。解決這個問題最簡單/最好的方法是什麼?svn與vim的差異,但與正確的文件類型

+1

左側文件的文件類型是什麼?你能在vim.org找到它的語法文件嗎? – michaelmichael 2010-07-24 14:41:50

+0

截圖?或者至少是文件名? – Dummy00001 2010-07-24 23:50:41

+0

如: 就好像Vimdiff可以用下面的命令 方面Vimdiff的.svn /文基/ foo.php.svn基foo.php 所以你看調用,VIM沒有認識到LHS文件的文件類型因爲不同的擴展名。 – user400978 2010-07-25 14:57:42

回答

3

當我在帶有.txt後綴的文件中使用重構文本時,默認情況下,vim不會突出顯示文本。所以我把它放在我的文件頂部:

.. vim: set filetype=rst : 

然後vim做所有可愛的語法突出顯示。

嘗試添加一個模式行到你的文件的第一行,然後看看當你做差異時vim是否做你想要的。

順便說一下,這是我的博客鏈接到!我可以得到獎品嗎?

+0

這也適用,謝謝馬修。 當然,「太多的PHP」給出的解決方案的作品,但我認爲這是一個很好的做法,是獨立於文件擴展名。 – user400978 2010-07-27 16:01:39

0

快速搜索「vim set filetype」給了我this link,它告訴你如何通過改變.vimrc來「永遠」做這件事。 如果你只是堅持一次一個文件,你知道它的「正確」的文件類型,你可以嘗試(從左側文件):

:set filetype=XXX 

其中XXX是適當的格式(如蟒蛇,c等)

看看

:help filteype 

也可能有助於有點

+0

恐怕不是。左側文件的文件類型將是,即它依賴於右側文件名。 – user400978 2010-07-25 14:55:49

+0

我明白你的意思了,但我建議你「強迫vim的手」理解左手邊是不同的文件類型。 我這樣做: 回聲「導入時間」> 1.py 回聲「導入時間」> 2.cpp 現在左手邊鍵入 :設置文件類型 顯示: 文件類型=蟒蛇 在RHS它顯示: filetype = cpp 但我可以通過使用以下命令強制使用rhs: :set filetype = python 希望有所幫助。 – 2010-07-26 14:22:53

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文件,並試圖找出文件類型會是什麼,而不在結束該擴展。

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

工程!謝謝。 – user400978 2010-07-27 16:02:46

0

建立在php的答案太多的情況下,即使文件擴展名不在svn文件名中,也能工作。假設你使用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