1

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

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

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

4

2 回答 2

5

您可以使用

:filetype detect

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

这可以通过 自动执行:autocmd,例如在BufWritePost仍然&filetype为空时。

于 2013-04-24T08:17:11.337 回答
1

我建议阅读 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)... 足以让您入门。我们不是 writethecodeformeforfree.com 社区。

于 2013-04-24T07:52:52.333 回答