我读维基百科并将其放入我的 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
。