當我在新緩衝區的第一行輸入shebang行(例如#!/bin/bash
)時,我想讓Vim更改filetype
。Vim在輸入shebang行後更改文件類型
目前我正在使用vim-shebang
插件來更改文件類型,但它只在打開新緩衝區時才起作用。
澄清:我很想通過在插入模式下映射<CR>
來實現所需的結果。我想要的是當我在緩衝區的第一行輸入#!/bin/bash<CR>
以自動執行:filetype detect
並返回到編輯。
當我在新緩衝區的第一行輸入shebang行(例如#!/bin/bash
)時,我想讓Vim更改filetype
。Vim在輸入shebang行後更改文件類型
目前我正在使用vim-shebang
插件來更改文件類型,但它只在打開新緩衝區時才起作用。
澄清:我很想通過在插入模式下映射<CR>
來實現所需的結果。我想要的是當我在緩衝區的第一行輸入#!/bin/bash<CR>
以自動執行:filetype detect
並返回到編輯。
我建議read the (always great) documentation of Vim(其中我引述波紋管):
:help new-filetype-scripts
這可以幫助你。
如果您的文件類型只能通過檢查文件的內容 來檢測。
創建您的用戶運行時目錄。您通常會使用
'runtimepath'
選項的第一個 項目。 Unix的例子::!mkdir ~/.vim
創建一個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。
您可以使用
:filetype detect
重新觸發文件類型檢測,你寫的家當行之後。
這可以用:autocmd
自動化,例如,在BufWritePost
時&filetype
仍爲空。