当我在新缓冲区的第一行filetype
键入 shebang 行(例如 )时,我希望 Vim 更改。#!/bin/bash
目前我正在使用vim-shebang
插件来更改文件类型,但它仅在打开新缓冲区时才有效。
澄清:我有兴趣通过<CR>
在插入模式下映射来实现所需的结果。我想要的是当我#!/bin/bash<CR>
在缓冲区的第一行键入以自动执行:filetype detect
并返回编辑。
您可以使用
:filetype detect
在编写 shebang 行后重新触发文件类型检测。
这可以通过 自动执行:autocmd
,例如在BufWritePost
仍然&filetype
为空时。
我建议阅读 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)
... 足以让您入门。我们不是 writethecodeformeforfree.com 社区。