2013-04-24 50 views
1

當我在新緩衝區的第一行輸入shebang行(例如#!/bin/bash)時,我想讓Vim更改filetypeVim在輸入shebang行後更改文件類型

目前我正在使用vim-shebang插件來更改文件類型,但它只在打開新緩衝區時才起作用。

澄清:我很想通過在插入模式下映射<CR>來實現所需的結果。我想要的是當我在緩衝區的第一行輸入#!/bin/bash<CR>以自動執行:filetype detect並返回到編輯。

回答

1

我建議read the (always great) documentation of Vim(其中我引述波紋管):

:help new-filetype-scripts 

這可以幫助你。

如果您的文件類型只能通過檢查文件的內容 來檢測。

  1. 創建您的用戶運行時目錄。您通常會使用'runtimepath'選項的第一個 項目。 Unix的例子::!mkdir ~/.vim

  2. 創建一個vim腳本文件來做到這一點。示例:

    if did_filetype() " filetype already set.. 
        finish  " ..don't do these checks 
    endif 
    if getline(1) =~ '^#!.*\<mine\>' 
        setfiletype mine 
    elseif getline(1) =~? '\<drawing\>' 
        setfiletype drawing 
    endif 
    

    有關更多示例,請參閱$VIMRUNTIME/scripts.vim

    將此文件寫爲「scripts.vim」到您的用戶運行時目錄中。對於 例如,在Unix:我建議你反對的映射,但你可以

    做到這一點:

    :w ~/.vim/scripts.vim 
    

更新(原題的編輯後)

:inoremap <CR> YOUR_SPECIAL_FUNCTION_WHICH_DETECS_THE_CURRENT_LINE_AND_RUNS_FILETYPE_DETECT 

上面的代碼片段(if getline(1) ...足夠讓你開始了,我們不是writeethecodeformeforfree.com c ommunity。

5

您可以使用

:filetype detect 

重新觸發文件類型檢測,你寫的家當行之後。

這可以用:autocmd自動化,例如,在BufWritePost&filetype仍爲空。