2009-09-10 72 views
14

我的日常工作涉及使用Perl進行編碼。在家裏我玩弄Python和Erlang。對於Perl,我想用兩個空格縮進我的代碼。而Python的標準是4.我也有一些鍵綁定來打開函數聲明,我想用所有的編程語言。 gVim如何實現這一點?gVim和多種編程語言

在那裏,有沒有辦法爲每種編程語言或類似的東西維護一個配置文件?

回答

22

您應該能夠通過利用文件類型與做......例如,添加到您的vimrc(和適當地修改爲不同語言):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

請勿覆蓋默認設置。使用'setlocal'(或'setl')而不是'set'。您不希望最後一個autocmd的設置打破其他緩衝區。 – 2009-09-10 14:24:53

+0

@Maxim - 良好的捕獲... :-) – 2009-09-10 20:59:45

+2

'set'命令接受多個選項。所以,寫起來更容易:'set tabstop = 4 shiftwidth = 4 expandtab' – 2009-09-13 01:36:19

23

在$ HOME,使vim的/目錄(或vimfiles /在Windows上),在其中創建ftplugin /目錄,並在其中保留名爲「perl.vim」或「python.vim」或「html.vim」或...

這些應該加載自動打開/創建給定文件類型的新文件,只要您不要忘記在.vimrc中添加:filetype plugin on(或windows下的_vimrc)

然後,vim選項應該定義爲:setlocal(而不是:set,否則它們的定義將覆蓋默認的全局設置)。

映射定義爲:n/i/v(nore)map <buffer>以及縮寫。命令是使用-b選項定義的。沒有插件的幫助,菜單就無法在本地生成。

local, <buffer>-b對於防止副作用是重要的。

+0

如果您使用的是Windows,請參閱「:help dos-locations」。 – 2009-09-10 10:53:31

+0

+1我不知道可以爲單個緩衝區定義命令! – 2009-09-17 01:17:02

3

以下是我的操作方法。以下是我的.vimrc的摘錄,並且我保持每種語言的進一步配置,並在加載新緩衝區時加載這些配置。

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

請注意,雖然我源文件,我可以執行任何VIM命令或調用函數。例如加載一個新的Java文件,我這樣做:

autocmd BufNewFile *.java call GeneratePackage() 

其中GeneratePackage()是VIM功能。

+0

autocmd FileType ...更好,因爲您將文件類型檢測(使用BufNewFile)與針對該類型文件執行的操作分開。 – joeforker 2009-09-10 12:57:13

7

除了rangerchris的回答,你可能會考慮使用模式線。模式行告訴編輯器如何配置本身:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

這模式行告訴vi來使用4級字符的標籤和自動縮進,用空格代替標籤,而當光標到達76個字符應該插入一個換行符。

您可以控制Vim的讀取模式行有兩個變量(在.vimrc最有可能的設置):

set modeline 
set modelines=5 

modeline變量告訴Vim尋找模式行,如果它被設置。 modelines變量告訴Vim從頂部和底部掃描多少行來尋找模式行(在這種情況下,如果它位於文件的第一行或最後五行,它將找到模式行)。

就像任何從不受信任的來源獲取指令的系統一樣,模式行可以是security threat,所以root用戶不應該使用模式行,並且應該保留Vim副本最新。

模式線的真正好處是它們是每個文件。大多數Perl人都是四個空格作爲縮進的人,但我是一個八字符標籤的人。在處理其他人的代碼時,我會使用反映其用法的模式行。剩下的時間我用我自己的。