2013-03-01 43 views
1

如何獲取vimscript中的當前文件類型,比如.vimrc或常規插件腳本? 該行vim:如何在插件腳本中獲取文件類型

echo &filetype 

返回一個空字符串。

+0

向我們展示你在哪裏使用它。在'.vimrc'中,沒有緩衝區被加載,所以它是空的。 – 2013-03-01 10:54:18

+0

我需要'.vim/bundles/vim-autoformat/plugin/autoformat.vim'。 – 2013-03-01 11:37:50

+0

當採購(與'.vimrc'相同,它爲時過早),或者在一個函數/映射/命令?! – 2013-03-01 11:57:28

回答

2

你需要考慮你的插件的時間。在Vim啓動過程中,當你的插件腳本來源,沒有緩衝區尚未加載,所以&filetype是空的。因此,像這樣

let s:formatprgvarname = "g:formatprg_".&filetype 

工作! (對於文件類型插件(在~/.vim/ftplugin/),這是不同的;那些只在已檢測文件類型,來源,但據我瞭解,你想要一個通用的插件,認爲目前的文件類型。)

相反,請刪除腳本本地變量s:formatprgvarname並解決&filetype在動作點;即當您的自動格式功能被觸發時(通過映射或自定義命令)。如果你沒有這樣的觸發器,你可以勾選FileType事件並設置一個(最好是緩衝區本地)變量,然後:

autocmd FileType * let b:formatprgvarname = "g:formatprg_".&filetype 
+0

當切換到具有不同文件類型的緩衝區時,是否也觸發了FileType事件? – 2013-03-01 12:32:58

+1

不,只有在最初檢測到它時。 – 2013-03-01 12:45:43

2

在功能:

let current_filetype = &filetype 

在命令行:

:echo &filetype 

&filetype是空的時,有沒有文件類型(明顯)。如果你在沒有緩衝區的情況下嘗試使用它,你什麼也得不到。

編輯

&filetype當你需要知道,當你正在編輯一個緩衝區在運行時執行的功能,當前文件類型是唯一有用的。

&filetype當緩衝器已被確定爲某些文件類型的時,才設置。當它被執行時,一個腳本(vimrc,ftplugin,不管)將不會經過它編輯時的行爲:沒有文件類型檢查,沒有&filetype

一個例子是一個函數,它根據文件類型在不同的外部應用程序中顯示當前文件。在任何其他環境中使用&filetype都沒有意義,因爲它將爲空。

+0

'&filetype'似乎在所有文件類型(如vim和python)的pluginscript中都是空的。 (但是,in-vim運行':echo&filetype'會產生正確的文件類型。) – 2013-03-01 10:44:53

+0

'&filetype'在運行時工作,而不是在腳本中。在運行時執行的函數中使用'&filetype'。 – romainl 2013-03-01 10:56:35

+0

@ Chiel92,看我的編輯。 – romainl 2013-03-01 11:06:53