Vim和LaTeX。如何使用语法隐藏在Vim中将“ \ ref {name}”隐藏为“ [name]”

时间:2019-03-21 18:56:09

标签: regex vim syntax latex

将以下文本视为LaTeX .tex文件的一部分:

This is some latex file, with a citation \ref{citationName} which is great

我想使用Vim的语法隐藏功能将此行转换为:

This is some latex file, with a citation [citationName] which is great

以下搜索和替换正则表达式会将第一行变成第二行::s/\v\\ref\{(\w+)}/[\1]/

但是,这是一次性的文本替换,我想使用vim的语法隐藏功能,例如:

  • 如果光标在包含\ref{name}的行上,则会显示原始文本
  • 如果光标不在包含\ref{name}的行上,则此类文本将被[name]替换(隐藏)

我已经阅读了:help conceal:help syntax,但我完全无法解决此问题。

问题

如何使用Vim的隐藏功能来获得上述指定的行为?

尝试1 : 我相信我将无法使用上面定义的正则表达式。但是,我可以将问题分为两个部分:

  • 用字符\ref{隐藏字符串\\ref\{(正则表达式:[
  • 隐藏字符串},该字符串由\ref{(花式正则表达式:\v(\\ref\{(w+))@<=})开头,字符为]

同时拥有两个正则表达式可以找到我想要隐藏的文本,并拥有想要隐藏它们的字符,我该如何真正隐藏它们?

1 个答案:

答案 0 :(得分:0)

您可以通过将以下内容放入\ref{name}中来将[name]替换为.vimrc

au VimEnter * syntax region Statement start='\\ref{' end='}' transparent contains=myStart,myEnd
au VimEnter * syntax match myStart '\\ref{\ze\w\+' contained conceal cchar=[
au VimEnter * syntax match myEnd '\(\\ref{\w\+\)\@<=\zs}' contained conceal cchar=]

au VimEnter * hi! link Conceal Statement
au VimEnter * set conceallevel=2

编辑:正如@ D.BenKnoble提到的那样,这不是最漂亮/最聪明的方法。您可能需要研究Latex-Suitefiletype specific autocommands