在我的 .vimrc 中,我有一个 autocmd 可以清理我的文件,但是我怎样才能从命令中映射出来呢?
autocmd BufWritePre *.test1 silent! :%s/\s\+$//e | silent! :%s/\(\n\n\)\n\+/\1/ | silent! :%s#\($\n\s*\)\+\%$## | :%s/;$
nnoremap ;; silent! :%s/\s\+$//e | silent! :%s/\(\n\n\)\n\+/\1/ | silent! :%s#\($\n\s*\)\+\%$## | :%s/;$<CR>
映射失败说
Error detected while processing ~/.vimrc:
line 966:
E486: Pattern not found: ;$<CR>
所以你的命令的主要问题是,通过使用
|
你实际上把它分成几个命令,第一个是nnoremap
,但是从第二个开始,一系列silent!
带有替换的命令,这些命令在你正在运行的时候.vimrc
运行来源,而不是成为命令的一部分。使用
\|
or<bar>
应该解决这个问题。第二个问题是
nnoremap
在正常模式下需要一个命令,所以它需要你silent!
并运行s
(substitute) 命令,然后将光标下的字符替换为ilent! ...
,这不是你想要的......你需要先做一个额外:
的silent!
所以它知道进入命令模式。第三,你的最后一个命令
%s/;$<CR>
格式不正确,你需要两个额外/
的 s 来完成它。我假设您的意图是去除;
行尾的所有 s,%s/;$//
我假设您在这里想要的也是如此。(我还注意到你跳过了silent!
那里,也许是遗漏了?我在这里添加它,以防万一。)把它们放在一起: