Vim 当“wrap”或“textwidth”被切换/设置时,是否有一个autocmd或其他钩子来检测?

Vim 当“wrap”或“textwidth”被切换/设置时,是否有一个autocmd或其他钩子来检测?,vim,Vim,我有一个函数,可以让我在不同的换行状态中循环,设置一系列选项(例如,formatoptions,重新映射0,$,以及其他按行移动等),这取决于换行是否关闭(set nowrap和set textwidth=0)(set wrap和set textwidth=0)或硬(set textwidth=78) 如果通过函数设置了wrap状态,这一切都可以正常工作 如果不是(例如,如果第三方插件设置了wrap状态),则这些选项/映射不会被设置/重置 如果这些事件是由其他代码触发的,我是否有办法处理它们?也

我有一个函数,可以让我在不同的换行状态中循环,设置一系列选项(例如,
formatoptions
,重新映射
0
$
,以及其他按行移动等),这取决于换行是否关闭(
set nowrap
set textwidth=0
)(
set wrap
set textwidth=0
)或硬(
set textwidth=78

如果通过函数设置了wrap状态,这一切都可以正常工作

如果不是(例如,如果第三方插件设置了wrap状态),则这些选项/映射不会被设置/重置

如果这些事件是由其他代码触发的,我是否有办法处理它们?也就是说,每当
wrap
textwidth
发生更改时,都会调用一个函数(或命令)来相应地调整键映射和选项


[注:为清晰起见进行了编辑]没有
选项已更改的事件;您最好使用一组频繁触发的事件,例如
CursorHold、CursorHoldI、CursorMoved、CursorMovedI
。如果您存储选项的上一个值并将其与当前值进行比较,您可以发现它是否已更改。

从问题是,为什么不在调用函数时获取选项的当前状态,而不是处理每次更改。无论如何,这是一个好问题。而且,到目前为止,答案是否定的——没有这样的挂钩。问题是当外部更改包装模式时,我的函数没有被调用,然后我必须手动调用我的函数因此,例如,在打开文档时,一些插件集
set wrap
。但我的所有关键映射和选项等仍处于默认的
no wrap
模式(例如,
j
未映射到
gj
格式选项
错误)。然后我必须自己调用我的函数(通常是在意识到事情没有按我希望的方式运行之后。我希望避免手动调用自己的函数,而不是在
wrap
textwidth
更改时触发。当然,在使用这些事件的autocmd中,您不希望做得太慢,因为它们经常被触发。@EvergreenTree:是的,基本上只是比较并返回。要将其与响应它的实际代码分离,您可以触发一个
:doautocmd User
事件。