在 vim 中,当我转到标记时,有没有办法告诉 vim 将它自动滚动到中间而不是我做z.或zz再次滚动?
或者当我转到像 vim 缓冲区事件这样的标记时是否有来自 vim 的事件?
运行内置命令前和后置命令的命令似乎很强大。所以可能有一个插件来做到这一点。无法为此找到对 google 的查询。
如果这只是为了'与朋友一起移动到标记(或只是更多的选择动作),您可以使用自定义映射覆盖原始命令,如下所示:
:nnoremap <expr> ' "'" . nr2char(getchar()) . 'zz'
:nnoremap <expr> ` "`" . nr2char(getchar()) . 'zz'
Run Code Online (Sandbox Code Playgroud)
这些基本上将 (typed)'a变成 (executed) 'azz;这里的复杂之处在于'命令等待输入的标记;映射通过getchar()在组装和返回完整命令之前执行此操作。这<expr>使得 Vim 将右侧作为表达式执行并使用结果,而不是直接执行它。
要始终将光标保持在窗口中间,请将该'scrolloff'选项设置为较高的值(如999)。
说到事件,CursorMoved每次移动后都会触发;不幸的是,没有迹象表明是哪个命令导致了移动。