2011-12-07 26 views
0

VIM手冊中閱讀usr_43後,我創建〜/ vim的/文件類型插件檢查我自己的文件類型在vim

的說明書上說要檢查我的runtimepath,結果

runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim73,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after 

是根據本插件運行時路徑,還是我需要在運行時路徑中添加'〜/ .vim/ftplugin'?

然後我試圖檢測SQL3文件:

vim ~/.vim/ftplugin/sqlte3.vim 

if exists("b:did_ftplugin")                   
    echo "yes : did_ftpplugin"                    
    finish                       
elseif                        
    echo "no : did_ftplugin"                   
endif                        

let b:did_ftplugin = 1                    

if did_filetype() 
    echo "yes : did_filetype"                      
    finish                       
elseif                        
    echo "no : do file type"                   
endif 

if getline(1) =~ '^#!*[/\\]sqlite3\>'                
    setf sql3                      
    echo "sqlite3 file"                    
elseif                        
    echo "not sqlite3 file"                   
endif 
之後,我做了「vim的〜/ test.sql3」

我想獲得一些輸出來驗證我的工作流程,但我得到沒有。

如何獲得〜/ .vim/ftplugin/sqlte3.vim的輸出?

回答

0

文件類型插件是一個錯誤的地方,把類似的代碼

if getline(1) =~ '^#!*[/\\]sqlite3\>' 
    setf sql3 
    echo "sqlite3 file" 
elseif 

你應該做的是把它添加到ftdetect/sql3.vim

autocmd BufRead,BufNewFile * :if getline(1)=~#'^#!.*[/\\]sqlite3\>' | set ft=sql3.vim | endif 

。另外請注意,如果你想擁有sql3文件類型,那麼ftplugin也必須命名爲sql3.vim,而不是sqlite3.vim,就像你的例子。 ftdetect插件的文件名並不重要,這只是一個協議,即ftdetect文件檢測一個文件類型的名稱應該與檢測到的文件類型匹配。

2

sql3不是自動檢測文件類型。您必須在ftdetect目錄中添加autocommand。例如:

au BufRead,BufNewFile *.sql3  set filetype=sql3 

比你的工作流程應該正常工作。

+0

謝謝。我創建了.vim/ftdetect/sql3.vim並添加了'au BufRead ....'。我重新啓動vim並打開samle.sql3。從底部我看到「sample.sql3 1L,19C」。我怎麼知道它執行ftplugin/sqlte3.vim? – CCC

+0

嘗試使用let g:my_variable ='foo'設置全局變量或嘗試使用echoerr。 – lucapette

+0

或使用':scriptnames'來查看已加載的腳本。 – idbrii