1

我有一种多语言文件类型,其中可以嵌入 C、python、ruby 等(如果有帮助,请考虑“wiki 页面”)。有没有办法在文件区域上执行已知文件类型的自动命令?

例如,我可能有:

#!bash
if [ a = b ]; then
   echo 'equal'
fi

#!python
if a = b:
    print('equal')

我想将 bash 文件类型自动命令应用于第一部分,将 python 文件类型自动命令应用于后一部分。

我可以通过使用这种方法定义一个区域来获得语法高亮,但我对自动命令的理解不够,无法以类似的方式应用它们。

4

1 回答 1

1

自动执行此操作具有挑战性,因为文件类型设置是缓冲区本地的;Vim 没有区域的概念,因此:autocmds需要使用,正如您所说的那样。

快捷方便

使用NrrwRgn 之类的插件 - 类似于 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 插件可能会有所帮助。

于 2014-08-01T18:50:04.770 回答