You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

UltiSnips:如何冻结vim.current.window.cursor值修复代码片段异常

解决Neovim中UltiSnips注释块等号长度随输入缩短的问题

这问题我之前折腾过好一会儿!核心原因是UltiSnips默认会在片段的每一步(比如你在占位符里输入内容时)重新执行所有!p代码块。原来的写法里,每次光标移动(输入内容时光标会右移),vim.current.window.cursor[1]都会取新的位置,导致等号长度跟着缩水。

要冻结光标位置的值,关键是在片段触发的瞬间就把光标列号存成一个变量,之后全程用这个固定变量计算等号长度。修改后的代码如下:

snippet #= "comment ===" b
!p pos = vim.current.window.cursor[1]
# `!p snip.rv = '=' * (78 - pos)`
# ${1:comments}
# `!p snip.rv = '=' * (78 - pos)`
endsnippet

为什么这样有效?

  • 第一行的!p pos = vim.current.window.cursor[1]只会在你触发片段的那一刻执行一次,把当时的光标列号存在pos变量里。
  • 后面两个!p代码块都用这个固定的pos值计算等号长度,不管你在${1:comments}里输入多少内容,光标怎么移动,等号的长度都不会再变了。

另外提个小细节:如果你的注释行宽度不是78,可以自己调整那个数字,改成你习惯的宽度就行。

内容的提问来源于stack exchange,提问作者Nic

火山引擎 最新活动