为vim插件ultisnips定义上下文

问题描述

我想使用vim命令定义一个python函数,这样当我的光标位于两个math字之间时,如下所示:

math A = [cursor]B+C math

python函数给出True,否则给出false。

功能允许定义Ultisnips上下文,这是vim中片段的插件

我从his回购中复制了此类功能的(著名的)示例,但我不太了解。 如果可能有帮助,我在这里添加它:

  global !p                                                                                                                                                  
  texmathzones = ['texmathzone'+x for x in ['a','as','b','bs','c','cs','d','ds','e','es','f','fs','g','gs','h','hs','i','is','j','js','k','ks','l','ls','v','w','x','y','z']]                                                                                                      
                                                                                                                                                             
  texignoremathzones = ['texmathtext']                                                                                                                       
                                                                                                                                                             
  texmathzoneids = vim.eval('map('+str(texmathzones)+",'hlid(v:val)')")                                                                                     
  texignoremathzoneids = vim.eval('map('+str(texignoremathzones)+",'hlid(v:val)')")                                                                         
                                                                                                                                                             
  ignore = texignoremathzoneids[0]                                                                                                                           
                                                                                                                                                             
  def math():                                                                                                                                                
      synstackids = vim.eval("synstack(line('.'),col('.') - (col('.')>=2 ? 1 : 0))")                                                                        
      try:                                                                                                                                                   
          first = next(i for i in reversed(synstackids) if i in texignoremathzoneids or i in texmathzoneids)                                                 
          return first != ignore                                                                                                                             
      except stopiteration:                                                                                                                                  
          return false                                                                                                                                       
  endglobal                                                                                                                                                  

函数在与Ultisnips插件关联的.snippets文件中定义,如果我的光标位于$或类似LaTeX数学构造之间,则该函数为1。

我想也许修改功能会有所帮助?还是可以创建一个自定义的文本对象来实现这一目标?

我确实了解python,但不了解vim脚本。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)