如何在不破坏 & 的情况下删除 vim 中的尾随空格?

如何在不破坏 & 的情况下删除 vim 中的尾随空格?

我读维基百科并将其放入我的 vimrc 中:

autocmd FileType less,sass,yml,css,html,php,twig autocmd BufWritePre <buffer> :%s/\s\+$//e

现在的问题是,每当我保存时,它&都会损坏:它会重复最后一次替换和替换的混合。例如,如果我执行:s/foo/bar然后保存,&似乎会执行:s/foo//。我希望它执行:s/foo/bar/。我该如何恢复此功能?

答案1

尝试将:%s...自动命令的部分更改为:

:call setline(1, map(getline(1,'$'), 'substitute(v:val,"\\s\\+$","","")'))

答案2

您必须避免使用:substitute,因为目前没有简单的方法来保存和恢复最后的替代字符串;:help function-undo-search在这里没有帮助。

大多数插件(如引用的 Wiki 页面所示)也存在此问题。一种解决方法是使用call setline(substitute(getline(lnum)), '\s\+$', '', '')循环遍历所有行,但这可能比 慢得多:substitute

相关内容