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

따라서 명령의 주요 문제는 명령을 사용하면 |실제로 여러 명령으로 분할된다는 것입니다. 그 중 첫 번째 명령은 nnoremap두 번째 명령부터 대체가 포함된 일련의 명령입니다. 런타임이 silent!실행 중입니다. .vimrc명령의 일부가 아닌 소스.

사용 \|하거나 <bar>이 문제를 해결해야 합니다.

두 번째 문제는 nnoremap명령이 일반 모드에서 실행되어야 하므로 (replace) 명령을 silent!실행 해야 한다는 것입니다 s. 그러면 커서 아래의 문자가 ilent! ...원하는 것이 아닌 로 대체됩니다. :그 전에는 필요합니다. 추가 silent!로 명령 모드로 들어가는 방법을 알 수 있습니다.

셋째, 마지막 명령이 제대로 구성되지 않았으므로 완료하려면 %s/;$<CR>두 개의 추가 s가 필요합니다 . /나는 당신의 의도가 ;줄 끝의 모든 s를 제거하는 것이라고 가정하고 있으므로 %s/;$//그것이 당신이 여기서 원하는 것이라고 가정합니다. (또한 당신이 거기를 건너뛴 것을 알았습니다 silent!. 놓쳤을 수도 있습니다. 만약을 대비해 여기에 추가하고 있습니다.)

함께 넣어보세요:

nnoremap ;; :silent! :%s/\s\+$//e \| silent! :%s/\(\n\n\)\n\+/\1/ \| silent! :%s#\($\n\s*\)\+\%$## \| silent! :%s/;$//<CR>

관련 정보