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

问题描述 投票:1回答:1

将以下文本视为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\{(正则表达式:[
  • 隐藏字符串qazxsw poi,其前面是qazxsw poi(花式正则表达式:}),字符\ref{

有两个正则表达式可以找到我想要隐藏的文本,并且有我想隐藏它们的字符,我怎么能真正隐藏它们?

regex vim syntax latex
1个回答
0
投票

您可以将以下内容放入\v(\\ref\{(w+))@<=},将]替换为\ref{name}

[name]

编辑:正如@ D.BenKnoble所说,这不是最漂亮/最聪明的方式。您可能想要查看.vimrcau 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

© www.soinside.com 2019 - 2024. All rights reserved.