Vim:在基于游标下角色的函数中做一些事情?

rom*_*ovs 6 vim cursor

我正在编写一个在LaTeX中编辑特定环境的函数.

环境基本上是这样的:

\begin{quicktikz}
    ...some stuff...
\end{quicktikz}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

\begin*{quicktikz}
    ...some stuff...
\end{quicktikz}
Run Code Online (Sandbox Code Playgroud)

我想编写一个在环境中调用时在两者之间切换的函数.由于我的Vim知识不是全部,我想出一个简单的解决方案:

  1. 获取光标位置 let save_cursor=getpos(".")
  2. 向后搜索\begin{quicktikz}使用:?\\begin{quicktikz}\|\\begin\*{quicktikz}
  3. 搜索{并向左移动:normal 0f{h
  4. 检查光标下的项目是否等于 *
    • 如果确实如此 normal x
    • 如果不这样做的话 normal a*<esc>
  5. 使用恢复光标位置 call setpos('.',save_cursor)

除了步骤3之外,我知道如何完成所有这些操作.如何检查光标下的字符是否等于*

如果您知道更好的方法,欢迎分享这一点.

sid*_*yll 7

我认为在光标下检索char的最简单方法是:

getline(".")[col(".")-1]
Run Code Online (Sandbox Code Playgroud)

或者,您也可以这样做 strpart()

strpart(getline("."), col(".")-1, 1)
Run Code Online (Sandbox Code Playgroud)

第一个表达式首先调用作为参数getline()传递的函数".",这意味着将返回光标所在的行.然后我们使用所谓的expr8expr- [](参见帮助)来检索单个字符.传递的数字来自另一个函数,col() 它返回当前的游标列.当索引从0开始时,减去一个.

你可以像使用它一样

if getline(".")[col(".")-1] == '*'
        ...
Run Code Online (Sandbox Code Playgroud)