![这是什么 Vim 魔法?](https://linux22.com/image/1355596/%E8%BF%99%E6%98%AF%E4%BB%80%E4%B9%88%20Vim%20%E9%AD%94%E6%B3%95%EF%BC%9F.png)
在关于维以及它解析 .vimrc 的能力,作者给出了一个复杂的 vim 绑定的例子,他断言 jVi 无法处理这个绑定:
inoremap hh <c-o>?\%<c-r>=line('.')<Return>l\({}\\|\[]\\|<>\\|><\\|()\\|""\\|''\\|><lt>\)?s+1<Return>
我想知道它能做什么(主要是如何做)。到目前为止我得到了:
- <co> :在普通模式下执行一条命令并返回到插入模式
- ?/%n :向后查找具有指定十进制/十六进制代码的字符
- 在这里插入行号有什么意义?
- 最后一部分查找特定的括号组合并将光标放在那里
- 我不明白怎么
l
能这样用
- 我不明白怎么
想澄清一下吗?
答案1
+就像您指出的那样。第一个Ctrl确实启动了向后搜索。O?
类似这样的模式序列\%15l
将搜索限制到第 15 行,l
第一个之后<Return>
是此类序列的结尾。映射使用
Ctrl+ R、特殊=
寄存器 ( :help i_CTRL-R
) 和表达式line('.')
将当前行号插入该序列,从而防止搜索转到其他行。
到最后一个字符为止的其余映射?
是一个相当直接的正则表达式,以匹配任意数量的字符序列。
最后?
表示模式的结束,该s+1
部分使光标定位在匹配开始后 1 个字符处 ( :help search-offset
)。