我的日常工作涉及使用Perl進行編碼。在家裏我玩弄Python和Erlang。對於Perl,我想用兩個空格縮進我的代碼。而Python的標準是4.我也有一些鍵綁定來打開函數聲明,我想用所有的編程語言。 gVim如何實現這一點?gVim和多種編程語言
在那裏,有沒有辦法爲每種編程語言或類似的東西維護一個配置文件?
我的日常工作涉及使用Perl進行編碼。在家裏我玩弄Python和Erlang。對於Perl,我想用兩個空格縮進我的代碼。而Python的標準是4.我也有一些鍵綁定來打開函數聲明,我想用所有的編程語言。 gVim如何實現這一點?gVim和多種編程語言
在那裏,有沒有辦法爲每種編程語言或類似的東西維護一個配置文件?
您應該能夠通過利用文件類型與做......例如,添加到您的vimrc(和適當地修改爲不同語言):
autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab
在$ 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
對於防止副作用是重要的。
如果您使用的是Windows,請參閱「:help dos-locations」。 – 2009-09-10 10:53:31
+1我不知道可以爲單個緩衝區定義命令! – 2009-09-17 01:17:02
以下是我的操作方法。以下是我的.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功能。
autocmd FileType ...更好,因爲您將文件類型檢測(使用BufNewFile)與針對該類型文件執行的操作分開。 – joeforker 2009-09-10 12:57:13
除了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人都是四個空格作爲縮進的人,但我是一個八字符標籤的人。在處理其他人的代碼時,我會使用反映其用法的模式行。剩下的時間我用我自己的。
請勿覆蓋默認設置。使用'setlocal'(或'setl')而不是'set'。您不希望最後一個autocmd的設置打破其他緩衝區。 – 2009-09-10 14:24:53
@Maxim - 良好的捕獲... :-) – 2009-09-10 20:59:45
'set'命令接受多個選項。所以,寫起來更容易:'set tabstop = 4 shiftwidth = 4 expandtab' – 2009-09-13 01:36:19