我试图在git中提交一些文件时出现“尾随空白”错误。
我想在保存python文件之前自动删除这些尾随的空白字符。
你能配置vim来做到这一点吗?如果是这样,怎么样?
答案 0 :(得分:201)
答案 1 :(得分:163)
编辑上述加上保存光标位置:
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%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()
答案 2 :(得分:66)
我通常也有:
match Todo /\s\+$/
在我的.vimrc
文件中,以便明确行尾空白。
Todo是一种语法高亮显示group-name,用于处理像TODO
,FIXME
或XXX
这样的关键字。它有一种令人讨厌的淡黄色背景颜色,我发现你在代码中不想要的东西是最好的: - )
答案 3 :(得分:51)
我都突出显示现有的尾部空格,并且还会删除尾随空格。
我将编辑器(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用于ruby文件,再次在我的〜/ .vimrc中
function! TrimWhiteSpace()
%s/\s\+$//e
endfunction
autocmd BufWritePre *.rb :call TrimWhiteSpace()
答案 4 :(得分:13)
这是一种按多个FileType过滤的方法。
autocmd FileType c,cpp,python,ruby,java autocmd BufWritePre <buffer> :%s/\s\+$//e
答案 5 :(得分:7)
从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\+$/
答案 6 :(得分:6)
我在评论中看到了这个解决方案 VIM Wikia - Remove unwanted spaces
我真的很喜欢它。在不需要的空格上添加.
。
.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()
答案 7 :(得分:5)
这就是我的做法。我不记得从哪里偷了它。
autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
%s/[ \t]\+$//ge
%s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun
答案 8 :(得分:3)
在所有情况下都不能接受从文件中删除尾随空格的解决方案。它将在一个从一开始就有这个策略的项目中工作,因此没有这样的空白,你不仅仅是在即将到来的提交中添加自己。
假设您只希望不添加尾部空格的新实例,而不会影响您未编辑的行中的现有空格,以使您的提交不受与您的工作无关的更改。
在这种情况下,使用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中的所有+
行,以便在我们将更改重新应用到工作目录时删除它们的尾随空格。如果此命令管道成功,我们将删除存储。
答案 9 :(得分:1)
在.vimrc
文件中使用MacVim时,其他方法在某种程度上对我无效。所以这里有一个能够突出显示尾随空格的内容:
set encoding=utf-8
set listchars=trail:·
set list
答案 10 :(得分:0)
autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>
答案 11 :(得分:0)
对于想要针对特定文件类型运行它的人(FileTypes并不总是可靠的):
autocmd BufWritePre *.c,*.cpp,*.cc,*.h,*.hpp,*.py,*.m,*.mm :%s/\s\+$//e
或者使用vim7:
autocmd BufWritePre *.{c,cpp,cc,h,hpp,py,m,mm} :%s/\s\+$//e
答案 12 :(得分:0)
如果修剪空格,则仅对已经清理的文件执行此操作。 “在罗马的时候...”。在处理虚假变化不受欢迎的代码库时,这是一个很好的礼仪。
此功能检测尾随空白,只有在已经清洁时才开启修剪。
这个想法的功劳归结为评论的宝石:https://github.com/atom/whitespace/issues/10(有史以来最长的错误票评论流)
<ListView
android:layout_width="match_parent"
android:layout_height="330dp"
android:id="@+id/dutch_runner_list_view"
style="@style/ListViewStyle"
android:clickable="true" />