vim:autocmdでマッピングする方法

vim:autocmdでマッピングする方法

私の.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

したがって、コマンドの主な問題は、コマンドを使用すると|実際に複数のコマンドに分割されることです。そのうちの最初のコマンドは、nnoremap2番目のコマンドから置換を含む一連のコマンドです。ランタイムが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>

関連情報