2017-10-29 23 views
2

안녕하세요, Vim 사용자.Vim - 변경된 버퍼가 작성 될 때 명령을 실행합니다.

:w으로 버퍼를 쓸 때 명령을 실행하려고합니다. 그러나 버퍼의 내용을 변경 한 경우에만 명령을 실행해야합니다.

나는이 어쩌면 같은 뭔가를해야만 생각 :

autocmd BufWritePost * if modified | echo 'execute command' | endif 

내가 어떻게 할 수 있나요?

편집 :

나는 해결책 Apperently 내가 앞에서 그 안에 '&'없이 변경 쓸 수 없습니다

autocmd BufWritePre * if &modified | echo 'execute command' | endif 

을 발견했다.

+0

그런데이 '에코', command'' 다음 에코하지만, 뭔가를 인쇄 할 뭔가를 실행'즐 즐 즐 written' 직후 올 것이다. 그 때문에 메시지가 보이지 않습니다. 명령은 계속 실행됩니다. –

답변

1

이미 알았 듯이 버퍼 로컬 'modified' 플래그를 확인할 수 있습니다. 구문을 보려면 &을 옵션 이름 앞에 붙여야합니다.

:write 대신 :update 명령을 사용하면 실제 변경이있는 경우에만 버퍼가 지속되고 (자동 트리거가 실행됩니다. 변경되지 않은 버퍼의 경우이 명령은 아무 작업도 수행하지 않습니다.

많은 사용자가이 유사한 매핑이 있습니다

nnoremap <C-S>  :<C-U>update<CR> 
vnoremap <C-S>  :<C-U>update<CR>gv 
inoremap <C-S>  <C-O>:update<CR>