我正在开发一个名为statemachine
的新(玩具)语言的vim插件,作为更大项目的一部分。
我正在尝试为此文件类型加载一个有效的编译器/ makeprg,我在compiler/statemachine.vim
中定义了一个
但是,当我尝试运行:make
或set makeprg?
时,我分别得到make
和makeprg=
。我也看不到我在echom
内定义的compiler/statemachine.vim
。所以我的文件compiler/statemachine.vim
中的代码似乎没有执行。
具体来说,我试图将这个注册时使用Syntastic作为有效的语法检查程序,并且先决条件是将makeprg
和errorformat
设置为有效值。
我可以使用我设置的equalprg
,并且可以从echom
看到syntax_checkers/statemachine/statemachine.vim
,所以我知道我的插件正以某种身份运行。
正确检测到文件类型:set filetype?
产生filetype=statemachine
到目前为止插件的目录布局:
.
├── README.md
├── autoload
│ └── statemachine.vim
├── compiler
│ └── statemachine.vim
├── complete.sh
├── example.sm
├── formatter.sh
├── ftdetect
│ └── statemachine.vim
├── ftplugin
│ └── statemachine.vim
├── syntax
│ └── statemachine.vim
├── syntax_checkers
│ └── statemachine
│ └── statemachine.vim
├── test.txt
└── validator.sh
vim插件代码的相关部分:
// autoload/statemachine.vim
function! statemachine#Errorformat()
return '%f:%l:\ %m'
endfunction
//ftdetect/statemachine.vim
au BufNewFile,BufRead *.sm set filetype=statemachine
// syntax_checkers/statemachine/statemachine.vim
function! SyntaxCheckers_statemachine_statemachine_GetLocList() dict
let l:makeprg = self.makeprgBuild({'args': ''})
echom 'inside getloclist'
return SyntasticMake({'makeprg': l:makeprg,
\ 'errorformat': statemachine#errorformat() })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({'filetype': 'statemachine',
\'name': 'statemachine'})
可以在此处找到完整的vim插件:https://github.com/scottopell/vim-statemachine
答案 0 :(得分:0)
感谢Sato Katsura和FDinoff在我原始问题的评论中,我只需要在某处添加compiler statemachine
。我选择将其添加到ftplugin
。