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