键入shebang行后Vim更改文件类型

时间:2013-04-24 07:23:22

标签: vim file-type

当我在新缓冲区的第一行输入shebang行(例如filetype)时,我希望Vim更改#!/bin/bash

目前我正在使用vim-shebang插件来更改文件类型,但它仅在打开新缓冲区时有效。

澄清:我有兴趣通过在插入模式下映射<CR>来实现所需的结果。我想要的是当我在缓冲区的第一行键入#!/bin/bash<CR>以自动执行:filetype detect并返回编辑时。

2 个答案:

答案 0 :(得分:5)

您可以使用

:filetype detect

在写完shebang行后重新触发文件类型检测。

这可以通过:autocmd自动执行,例如<{1}}当BufWritePost仍然为空时。

答案 1 :(得分:1)

我建议read the (always great) documentation of Vim(我在引用下面的内容):

:help new-filetype-scripts

这可能会对你有帮助。

  

如果您的文件类型只能通过检查内容来检测   文件。

     
      
  1. 创建用户运行时目录。你通常会使用第一个     'runtimepath'选项的项目。 Unix的示例::!mkdir ~/.vim

  2.   
  3. 创建一个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
    
  4.   

更新(在编辑原始问题之后):我建议不要映射 ,但你可以用

来做
:inoremap <CR> YOUR_SPECIAL_FUNCTION_WHICH_DETECS_THE_CURRENT_LINE_AND_RUNS_FILETYPE_DETECT

上面的代码片段(if getline(1) ...足以让您入门。我们不是自由撰稿的网站。