<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    CONAN ZONE

    你越掙扎我就越興奮

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

    本節所用命令的幫助入口:

    :help filetype
    :help setfiletype
    :help modeline
    :help 'modelines'
    :help 'shiftwidth'
    :help 'expandtab'
    :help autocmd

    打開文件類型檢測功能很簡單,在你的vimrc中加入下面一句話就可以了:


    filetype plugin indent on

    如果你用的是VIM自帶的示例vimrc,那么你已經打開了文件類型檢測功能。或者,你也可以輸入“:filetype”命令查看你的文件類型檢測功能有沒有打開。

    這條命令究竟做了什么呢?我們在下面詳細介紹。

    其實,上面這一條命令,可以分為三條命令:

    filetype on
    filetype plugin on
    filetype indent on
    我們逐條介紹這三條命令。

    “filetype on”命令打開文件類型檢測功能,它相當于文件類型檢測功能的開關。在執行“filetype on”命令時,VIM實際上執行的是$VIMRUNTIME/filetype.vim腳本。這個腳本使用了自動命令(autocmd)來根據文件名來判斷文件的類型,如果無法根據文件名來判斷出文件類型,它又會調用$VIMRUNTIME/scripts.vim來根據文件的內容設置文件類型。有興趣可以讀一下這兩個腳本,以獲得更深的認識。

    在上述步驟完成后,絕大多數已知類型的文件,都能被正確檢測出文件類型。如果文件的類型未能被正確的檢測出來,就需要手工設置文件類型,這可以通過“set filetype”完成,例如,如果你把main.c改名為main.c.bak1,那么它就無法被正確檢測出文件類型。通過下面的Ex命令,就可以把它的文件類型設為c:


    :set filetype=c或者,你可以在文件中加入一個模式行,來指明這個文件的類型。VIM在打開文件時,會在文件首、尾的若干行(行數由'modelines'選項決定,缺省為5行)檢測具有VIM特殊標記的行,稱為模式行。如果檢測到,就使用模式行中定義的選項值,來修改該緩沖區的選項。你可以留意一下VIM的幫助頁,每個文件的最后一行都是這樣的模式行。

    針對上例,我們可以在main.c.bak1的第一行或最后一行加上下面的內容,要指定這個文件的類型:


    /* vim: ft=c */這句話使用“/* */”注釋起來了,因此不會影響編譯。“ft”是“filetype”的縮寫,VIM中很多命令、選項都有縮寫形式,以方便使用。注意“/*”與“vim:”間的空格。在“*/”與“ft=c”間,也需要有至少一個空格,這是模式行格式的要求,更多信息參閱“:help modeline”。

    檢測出文件的類型有什么作用呢?我們知道,不同類型的文件具有不同的格式,VIM通過對文件類型的識別,可以為不同類型的文件,設置不同的選項值、定義不同鍵綁定等。例如,對于c類型的文件,它就和bash腳本有不同的注釋格式、不同的縮進格式、不同的關鍵字等。VIM在設置文件類型后,會觸發FileType事件,執行FileType相關的自動命令,對不同類型的文件區別對待。

    上面提到的“filetype plugin on”,允許VIM加載文件類型插件。當這個選項打開時,VIM會根據檢測到的文件類型,在runtimepath中搜索該類型的所有插件,并執行它們。

    “filetype plugin on”命令,實際上是執行$VIMRUNTIME/ftplugin.vim腳本,有興趣可以讀一下這個腳本。這個腳本中會設置自動命令,在runtimepath中搜索文件類型插件。

    runtimepath的定義在不同的系統上不一樣,對UNIX系統來說,這些路徑包括:$HOME/.vim、$VIM/vimfiles、$VIMRUNTIME、$VIM/vimfiles/after、$HOME/.vim/after。

    舉一個例子,當我們對一個c類型的文件打開“filetype plugin on”時,它會在上述這幾個目錄的ftplugin子目錄中搜索所有名為c.vim、c_*.vim,和c/*.vim的腳本,并執行它們。在搜索時,它按目錄在runtimepath中出現的順序進行搜索。缺省的,它會執行$VIMRUNTIME/ftplugin/c.vim,在這個腳本里,會設置c語言的注釋格式、智能補全函數等等。

    “filetype indent on”允許VIM為不同類型的文件定義不同的縮進格式。這條命令也是通過一個腳本來完成加載:$VIMRUNTIME/indent.vim。和“filetype plugin on”類似,它也通過設置自動命令,在runtimepath的indent子目錄中搜索縮進設置。對c類型的文件來說,它只是打開了cindent選項。

    我們了解了文件類型檢測的用途及它是如何工作的之后,就可以根據自己的需要,來對特定的文件類型進行特殊設置。

    例如,我們在上篇文章中介紹過lookupfile插件,在它打開一個緩沖區時,會把緩沖區的filetype設置為lookupfile,我們可以利用這一點,在這個緩沖區里進行一些特殊的配置。例如,我們創建一個名為lookupfile.vim的文件,其內容為:


    " close lookupfile window by two <Esc>
    nnoremap <buffer> <Esc><Esc> <C-W>q
    inoremap <buffer> <Esc><Esc> <Esc><C-W>q它定義了兩個局部于緩沖區的鍵綁定,無論在normal模式還是插入模式,只要連按兩次ESC,就關閉當前緩沖區。

    把這個文件保存到你的runtimepath所指向任一目錄的ftplugin子目錄中(一般是放在~/.vim/ftplugin目錄中)。你在下次打開lookupfile窗口時,試試連按兩次ESC,是不是lookupfile窗口就關閉了?這樣設置,非常適合VIM中按ESC取消命令的習慣,效率也高。

    如果你對VIM缺省文件類型插件的設置不太滿意,那么可以把這個全局插件拷貝到$HOME/.vim/plugin目錄中,然后更改其中的設置。你可以留意一下VIM缺省的文件類型插件,它們的頭部都有這樣的代碼:


    " Only do this when not done yet for this buffer
    if exists("b:did_ftplugin")
      finish
    endif這類似于C語言頭文件中的“#ifndef XXX | #define XXX”的語句,可以防止該插件被執行多次。因此,把這個插件拷貝到$HOME/.vim/plugin中(這個目錄在runtimepath中排在最前面),它將先于VIM的缺省插件被加載;而它加載后,VIM的缺省文件類型插件就不會再被加載了。這就達到了我們修改設置的目的。

    不過我們通常不用這種方法。如果這樣做,一旦VIM的缺省插件做了改變,我們也要更新我們改過的插件才行。我們可以在載入全局插件以后否決一些設置。在Unix 上,我們可以把我們的設置放在~/.vim/after/ftplugin/目錄中,這個目錄中的腳本會在VIM的缺省腳本后執行。這樣就可以修改配置,或增加我們自己的定義。

    舉個例子,在多人一起開發項目時,為了使代碼風格盡量保持一致,一般不允許在代碼使用TAB符,而以4個空格代之。我們可以編輯一個文件,包含下面的內容:


    set shiftwidth=4
    set expandtab把這個文件保存為~/.vim/after/ftplugin/c.vim。這樣,每次在編輯c文件時,它的自動縮進為4個空格;當你在插入模式下使用CTRL-D、CTRL-T縮進時,它也會調整4個空格的縮進;當你按TAB鍵時,它將會插入8個空格……如果你想上面的設置對h文件也生效的話,需要把它另存一份:~/.vim/after/ftplugin/cpp.vim,因為h文件的文件類型被設為cpp。

    我們知道,VIM在設置文件類型時,會觸發FileType自動命令,因此,上面的例子可以用下面的自動命令來實現:


    autocmd FileType c,cpp set shiftwidth=4 | set expandtab把這個命令放在你的vimrc中,可以起到和上例同樣的效果。

    來自:http://blog.csdn.net/easwy/archive/2007/03/20/1534580.aspx

    posted on 2009-04-08 21:49 CONAN 閱讀(592) 評論(0)  編輯  收藏 所屬分類: VIM
    主站蜘蛛池模板: 夜色阁亚洲一区二区三区| 日本一区二区三区免费高清| 国产精品成人四虎免费视频| 亚洲国产精品网站久久| 免费女人高潮流视频在线观看| 中文字幕一精品亚洲无线一区 | 亚洲综合无码无在线观看| 国产91免费在线观看| 99亚偷拍自图区亚洲| 午夜免费福利在线| 国产亚洲精品美女久久久久久下载| 国产精品无码免费视频二三区 | 看全色黄大色大片免费久久| 亚洲日本成本人观看| 日日夜夜精品免费视频| 一级做a爰片久久毛片免费陪| jlzzjlzz亚洲乱熟在线播放| 中文在线观看国语高清免费| 精品亚洲aⅴ在线观看| 性生交片免费无码看人| 国产精品国产亚洲区艳妇糸列短篇 | a级成人免费毛片完整版| 婷婷亚洲久悠悠色悠在线播放| 国产91色综合久久免费| 国产亚洲欧美日韩亚洲中文色| 久久精品国产亚洲Aⅴ香蕉| 久久综合国产乱子伦精品免费 | 免费久久精品国产片香蕉| 免费国产污网站在线观看不要卡| 中文字幕亚洲综合久久男男| 午夜免费福利片观看| 亚洲色偷偷综合亚洲av78| 国产亚洲AV夜间福利香蕉149| 国产免费的野战视频| 亚洲综合无码无在线观看| 久久精品亚洲福利| 成人福利免费视频| 日韩少妇内射免费播放| 亚洲校园春色小说| 久久亚洲精品无码观看不卡| 97人妻无码一区二区精品免费|