私の.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>
答え1
したがって、コマンドの主な問題は、コマンドを使用すると|
実際に複数のコマンドに分割されることです。そのうちの最初のコマンドは、nnoremap
2番目のコマンドから置換を含む一連のコマンドです。ランタイムがsilent!
実行中です。.vimrc
コマンドの一部ではないソース。
使用する\|
か、<bar>
この問題を解決する必要があります。
2番目の問題は、nnoremap
コマンドを通常モードで実行する必要があるため(replace)コマンドをsilent!
実行する必要があることですs
。これにより、カーソルの下の文字が必要なものilent! ...
に置き換えられます。:
その前には必要です。さらにsilent!
コマンドモードに入る方法がわかります。
第三に、最後のコマンドが正しく設定されていないため、完了するには%s/;$<CR>
2つの追加sが必要です。/
私はあなたの意図が行末;
のすべてのsを削除することを前提としているので、%s/;$//
それがあなたがここで欲しいものであると仮定します。 (また、あなたがそこをスキップしたことがわかりましたsilent!
。逃したかもしれません。あなたがここに追加した場合)
一緒に入れてください:
nnoremap ;; :silent! :%s/\s\+$//e \| silent! :%s/\(\n\n\)\n\+/\1/ \| silent! :%s#\($\n\s*\)\+\%$## \| silent! :%s/;$//<CR>