我有一种可以嵌入C,python,ruby等的多语言文件类型(如果有帮助,请考虑“wiki页面”)。有没有办法在文件的某个区域上执行已知文件类型的自动命令?
例如,我可能有:
#!bash
if [ a = b ]; then
echo 'equal'
fi
#!python
if a = b:
print('equal')
我想将bash文件类型自动命令应用于第一部分,将python文件类型自动命令应用于后一部分。
我可以通过使用this方法定义区域来获得语法高亮显示,但我不了解自动命令能够以类似的方式应用它们。
答案 0 :(得分:1)
自动执行此操作具有挑战性,因为文件类型设置是缓冲区本地的; Vim没有区域概念,因此您需要使用:autocmds
,正如您所说的那样。
使用像NrrwRgn - A Narrow Region Plugin similar to Emacs这样的插件,您可以克隆区域以分隔临时缓冲区;插件会在写入时自动同步它们。可以通过:setf
为每个缓冲区提供单独的文件类型。
更简单的方法是定义一些映射以快速切换文件类型:
:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>
草图很简单:
:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif
这依赖于每个文件类型插件正确清理(或覆盖所有相关选项)。
您当然不希望明确指定行号,如上图所示。如果您有/可以为每个块定义正确的语法区域,我的OnSyntaxChange plugin可能会有所帮助。