Vim 运行 BuffWrite 命令时出现错误 E20 'Mark not set'

Vim Error E20 'Mark not set' when running BuffWrite Command

我在我的 vimrc 中设置了一个自动运行脚本来将任何包含 3 个或更多空换行符的块压缩为 3 个换行符。我设置了一个标记,因此在脚本执行后,我保留了我的光标位置,但是当光标位于要删除的区域内时,我收到 E20 Mark not set 错误。

发生这种情况时,我该如何解决这个 issue/silence 错误?

" .vimrc file: autocmd BufWrite * mark ' | silent! %s/\n\{3,}/\r\r\r/e | norm''

您可以用 winsaveview()winrestview() 替换您的标记。

autocmd BufWrite * let w:winview = winsaveview() | ... | if exists('w:winview') | call winrestview(w:winview) | endif

同时使正常命令静音:

autocmd BufWrite * mark ' | silent! %s/\n\{3,}/\r\r\r/e | silent! exe "norm! ''"