【问题标题】:Surrounding a latex equation in vim在vim中围绕一个乳胶方程
【发布时间】:2017-08-30 12:03:16
【问题描述】:

我使用 vim(和 vim latex-suite)来编辑乳胶文档。经常发生的事情是需要将内联方程更改为显示方程,如下所示。我开始:

The most important equation is \(f(x)=x^2,\) but most disagree.

并以:

结尾
The most important equation is 
  \begin{equation*}
    f(x)=x^2,
    \end{equation*}
  but most disagree.

将光标放在“=”上,我很高兴调用一个函数来实现结果,并且我大概可以弄清楚如何自己编辑缩进和间距,所以输出就足够了

The most important equation is 
\begin{equation*}
f(x)=x^2,
\end{equation*}
but most disagree.

理想情况下,以相反方向工作的函数(显示方程到内联方程)也很好,但首先要做的是。 FWIW,我正在使用surround.vim 插件,它似乎非常适合\(\)中的周围文本,但我不确定它是否可用于检测/突出显示乳胶方程。它似乎对 HTML 标签有这个功能,但我还没有看到它为乳胶实现。任何帮助将不胜感激。

[编辑:]

为了澄清我在寻找什么,我想说的是,surround.vim 是否可用于自定义非对称引号/括号检测。这就是我知道该怎么做。在我的 ~/.vimrc 文件中,我有一行

autocmd FileType tex let b:surround_101 = "\\(\r\\)"

然后当我编辑一个 tex 文件时,我有以下内容:

This is a $word in$ a some text.
            [ ]

我可以在普通模式下输入:

cs$e

我得到了

This is a \(word in\) a some text.
         [ ]

同样,如果我有

This is a <p>word in</p> a some text.
              [ ]

我可以在普通模式下输入:

cste

我得到了

This is a \(word in\) a some text.
         [ ]

我想做的就是从这里开始:

This is a \(word in\) a some text.
             [ ]

到这里:

This is a \foo word in \bar a some text.
         [ ]

我想知道这是否可以通过环绕.vim 实现。例如,关于这个:

This is a \(word in\) a some text.
             [ ]

我试过了

cse$

但这并没有像我希望的那样将 \(word in\) 更改为 $word in$。如果这不可能与环绕.vim,那将是一种耻辱,因为它已经具有我想要用于乳胶方程式的 HTML 标记的确切功能,所以看起来我必须为乳胶重新编码相同的功能从头开始的方程。

【问题讨论】:

  • 到目前为止你有没有尝试过?通过展示您的尝试并描述您遇到困难的部分,我们可以更好地了解您的熟练程度并给出更准确的答案。就目前而言,看起来您已经发布了一个需求并希望有人为您编写代码。
  • 是的,surround.vim 可以做到这一点;查看:help surround-customizing。环绕声不检测(乳胶方程或其他);您可以通过在ys 之后键入相应的replacement 来选择周围的类型。
  • 我编辑了我的帖子以澄清我的问题,并举一个我尝试过的例子。

标签: vim latex surround


【解决方案1】:

如果您使用 vimtex 而不是 vim-latex-suite,我认为它可以满足您的需求。用于更改周围环境的cse 会要求您输入环境名称,然后将周围的$ 更改为\begin{...} \end{...},为常用环境创建自定义绑定看起来非常简单。它还可以将分隔符从( ) 切换到\left( \right),在equationequation* 环境之间立即切换。

【讨论】:

    【解决方案2】:

    你可以让 surround.vim\foo ... \bar 包围文本:

    let b:surround_102 = "\\foo \r \\bar"
    

    现在,ys2wf 将包围下一个 2 words; f 是(任意)选择的替换符号,对应于:echo char2nr('f') => 102

    这记录在:help surround-customizing 下。它定义了一个自定义替换。为了将\(...\) 转换为\foo ... \bar(反之亦然),您还必须定义一个自定义目标(cp.:help surround-targets)。不幸的是,该插件目前不支持该功能;仅支持一组固定的目标,标签在插件内作为特例实现。至少对于这种情况下的文字替换,我看不出插件不能支持这些的理由。哦,看,已经有人opened an issue 了!

    还有像vim-sandwich 这样的替代插件。到目前为止,我只是简单地查看了该插件,但它似乎具有更出色的可定制性,因此它可能在那里工作。

    【讨论】:

      【解决方案3】:

      请注意,最近版本的环绕.vim 提供了一个\ 替换目标,这样

      yss\equation*<CR>
      

      在方程式环境中围绕直线。 l 是同义词。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-29
        • 2019-10-07
        • 2010-11-29
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多