Vi와 Vim에 저장할 때 후행 공백을 자동으로 제거하는 방법은 무엇입니까?


22

.vimrc파일을 저장할 때 후행 공백을 자동으로 제거 하는 설정이 있습니까?

이상적으로 (안전하게) 특정 파일에 대해서만이 기능을 원합니다. *.rb

답변:


25

모든 파일에 대해 (.vimrc 파일에서) 작동합니다.

autocmd BufWritePre * :%s/\s\+$//e

이것은 ruby ​​(.rb) 파일에 대해서만 작동합니다 (.vimrc 파일에서).

autocmd BufWritePre *.rb :%s/\s\+$//e

6
이 솔루션은 훌륭하지만 아래의 @Sukminder 솔루션이 커서의 위치를 ​​올바르게 조정하기 때문에 더 좋습니다.
hlin117

라스트 렛은 무엇을 e사용합니까?
acgtyrant

19

커서 위치를 유지하려면 다음과 같이 사용하십시오.

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

그렇지 않으면 저장 후 마지막 교체 행의 시작 부분에 커서가 나타납니다.

: 줄 끝에 공백 122이 있고 온라인 상태 982에서 입력 :w합니다. 위치를 복원하지 않으면 커서가 줄의 시작 부분에서 122끝나서 작업 흐름이 중단됩니다 .

를 사용하여 함수 호출을 설정하십시오 autocmd.

" Using file extension
autocmd BufWritePre *.h,*.c,*.java :call <SID>StripTrailingWhitespaces()

" Often files are not necessarily identified by extension, if so use e.g.:
autocmd BufWritePre * if &ft =~ 'sh\|perl\|python' | :call <SID>StripTrailingWhitespaces() | endif

" Or if you want it to be called when file-type i set
autocmd FileType sh,perl,python  :call <SID>StripTrailingWhitespaces()

" etc.

getpos () 를 사용할 수도 있지만이 경우에는 필요하지 않습니다 .

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")

2

DeleteTrailingWhitespace 플러그인 은이 작업을 수행하며 다양한 간단한 :autocmds부동 과 달리 특수 사례를 처리하거나 사용자를 쿼리하거나 후행 공백으로 쓰기를 중단 할 수 있습니다.

플러그인 페이지에는 대안에 대한 링크가 있습니다. Vim Tips Wiki 에 대한 토론도 많이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.