可以。这段代码摘自此处。
将此代码放入~/.vim/r.vim
文件中(如果这些文件不存在,请创建它们)。
function! TextEnableCodeSnip(filetype,start,end,textSnipHl) abort
let ft=toupper(a:filetype)
let group='textGroup'.ft
if exists('b:current_syntax')
let s:current_syntax=b:current_syntax
" Remove current syntax definition, as some syntax files (e.g. cpp.vim)
" do nothing if b:current_syntax is defined.
unlet b:current_syntax
endif
execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim'
try
execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim'
catch
endtry
if exists('s:current_syntax')
let b:current_syntax=s:current_syntax
else
unlet b:current_syntax
endif
execute 'syntax region textSnip'.ft.'
\ matchgroup='.a:textSnipHl.'
\ start="'.a:start.'" end="'.a:end.'"
\ contains=@'.group
endfunction
现在你可以使用
:call TextEnableCodeSnip( 'r', '```{r}', '```', 'SpecialComment')
只要有一个 r.vim 语法文件。
您还可以在打开 .Rmd 文件时自动调用此方法:
autocmd BufNewFile,BufRead *.Rmd :call TextEnableCodeSnip( 'r', '```{r}', '```', 'SpecialComment')
如果您想使用正则表达式来强调以r开头的任意数量字符,则可以这样做:
:call TextEnableCodeSnip( 'r', '```{r.*}', '```', 'SpecialComment')
或在您的.vimrc文件中:
autocmd BufNewFile,BufRead *.Rmd :call TextEnableCodeSnip( 'r', '```{r.*}', '```', 'SpecialComment')
.*
正则表达式表示任何重复的字符。因此,r.*
表示 r
后面跟着任意数量的字符。
因此这将与以下内容配合使用
```{r whatever you want to put here}`
Some r code here
```