git에서 일부 파일을 커밋하려고하는 'trailing whitespace'오류가 발생합니다.
파이썬 파일을 저장하기 직전에 후행 공백 문자를 자동으로 제거하고 싶습니다.
이를 위해 vim을 구성 할 수 있습니까? 그렇다면 어떻게?
git에서 일부 파일을 커밋하려고하는 'trailing whitespace'오류가 발생합니다.
파이썬 파일을 저장하기 직전에 후행 공백 문자를 자동으로 제거하고 싶습니다.
이를 위해 vim을 구성 할 수 있습니까? 그렇다면 어떻게?
답변:
e
마지막에 패턴을 찾지 못하면 vi는 대체 명령이 실패한 것으로 간주하지 않는다는 것을
위의 커서 위치와 저장 커서 위치의 컴파일 :
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
keepp %s/\s\+$//e
call cursor(l, c)
endfun
autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
파일에 저장할 때 이것을 적용하려면 두 번째 파일을 제외 autocmd
하고 와일드 카드를 사용하십시오 *
.
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
autocmd FileType c,cpp,java,php,ruby,python
모든 파일에 적용하기 위해 부분을 제거했습니다 .
<buffer>
으로 *
모든 파일에 대한 작업을 원하는 경우
keepp
keepp %s/\s\+$//e
나는 또한 보통 :
match Todo /\s\+$/
내 .vimrc
파일에서 줄 끝 공백이 강조 표시됩니다.
Todo는 , 또는 과 같은 키워드를 강조 표시하는 데 사용되는 구문 강조 그룹 이름 입니다 . 성가 시게 못생긴 노란 배경색을 가지고 있으며 코드에서 원하지 않는 것을 강조하는 것이 가장 좋습니다 :-)TODO
FIXME
XXX
:hi Todo
. 그래서 정독 :hi <Tab>
하고 :help hi
. 나는 생각 Cursor
하고 Error
,하지만 난 시도 것 같아요 match VisualNOS /\s\+$/
. 나는 이것을 autocmd
다른 답변의 일부와 결합 할 수 있습니다.
나는 기존의 후행 공백을 강조하고 후행 공백을 제거합니다.
끝에 공백을 표시하도록 편집기 (vim)를 구성합니다. 예 :
내 .vimrc의 하단에 이것을 사용하십시오 :
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
그리고 파일을 저장할 때 파일에서 '자동 스트립'합니다. 내 경우에는 루비 파일 * .rb, ~ / .vimrc에 다시
function! TrimWhiteSpace()
%s/\s\+$//e
endfunction
autocmd BufWritePre *.rb :call TrimWhiteSpace()
http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html 에서 복사하여 붙여 넣기 (링크가 더 이상 작동하지 않지만 필요한 비트는 다음과 같습니다)
"이것은 파일을 열거 나 삽입 모드를 떠날 때만 줄 끝에 입력하는 각 공간을 강조 표시하지 않는 이점이 있습니다. 매우 깔끔합니다."
highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace guibg=red
au BufEnter * match ExtraWhitespace /\s\+$/
au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
au InsertLeave * match ExtraWhiteSpace /\s\+$/
VIM Wikia 의 의견 에서이 솔루션을 보았습니다 -원하지 않는 공간을 제거하십시오.
정말 좋아. .
불필요한 공백을 추가합니다 .
.vimrc
" Removes trailing spaces
function TrimWhiteSpace()
%s/\s*$//
''
endfunction
set list listchars=trail:.,extends:>
autocmd FileWritePre * call TrimWhiteSpace()
autocmd FileAppendPre * call TrimWhiteSpace()
autocmd FilterWritePre * call TrimWhiteSpace()
autocmd BufWritePre * call TrimWhiteSpace()
이것이 내가하는 일입니다. 어디에서 훔쳤는 지 기억이 나지 않습니다.
autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
%s/[ \t]\+$//ge
%s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun
%s
으로 세계 (g) 깃발이 EOL의 공간만큼 쓸모없는 것처럼 보입니다 :-)
파일에서 후행 공백을 제거하는 솔루션은 모든 상황에서 허용되는 것은 아닙니다. 처음부터이 정책을 적용한 프로젝트에서 작동하므로 앞으로 커밋에 자신을 추가하지 않은 공백이 없습니다.
작업과 관련없는 변경 사항을 커밋하지 않기 위해 편집하지 않은 줄의 기존 공백에 영향을 미치지 않고 후행 공백의 새 인스턴스를 추가하지 않기를 원한다고 가정하십시오.
이 경우 git을 사용하면 다음과 같은 스크립트를 사용할 수 있습니다.
#!/bin/sh
set -e # bail on errors
git stash save commit-cleanup
git stash show -p | sed '/^\+/s/ *$//' | git apply
git stash drop
즉, 변경 사항을 숨기고 +
작업 디렉토리에 변경 사항을 다시 적용 할 때 diff의 모든 줄 을 필터링 하여 후행 공백을 제거합니다. 이 명령 파이프가 성공하면 숨김을 삭제합니다.
MacVim에서 .vimrc
파일에 사용될 때 다른 접근 방식이 어떻게 든 작동하지 않았습니다 . 다음은 후행 공백을 수행하고 강조 표시하는 것입니다.
set encoding=utf-8
set listchars=trail:·
set list
set listchars=trail:·
말 : E474: Invalid argument: listchars=trail:·
. 예를 확인할 수 있습니까?
공백을 자르면 이미 깨끗한 파일 에서만 해야합니다. "로마에 갔을 땐...". 이것은 가짜 변경이 환영받지 않는 코드베이스에서 작업 할 때 좋은 예의입니다.
이 기능은 후행 공백을 감지하고 이미 깨끗해야 트리밍을 켭니다.
이 아이디어에 대한 크레딧은 https://github.com/atom/whitespace/issues/10 (가장 긴 버그 티켓 댓글 스트림)
autocmd BufNewFile,BufRead *.test call KarlDetectWhitespace()
fun! KarlDetectWhitespace()
python << endpython
import vim
nr_unclean = 0
for line in vim.current.buffer:
if line.rstrip() != line:
nr_unclean += 1
print "Unclean Lines: %d" % nr_unclean
print "Name: %s" % vim.current.buffer.name
cmd = "autocmd BufWritePre <buffer> call KarlStripTrailingWhitespace()"
if nr_unclean == 0:
print "Enabling Whitespace Trimming on Save"
vim.command(cmd)
else:
print "Whitespace Trimming Disabled"
endpython
endfun
fun! KarlStripTrailingWhitespace()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
let _s=@/
하고 마지막에`let @ / = _ s` 복원 할 수도 있습니다 .이 경우에는 블랙홀 레지스터를 사용합니다