在Git中提交一些文件时,我得到了“尾随空白”错误。

我想在保存Python文件之前自动删除这些尾随的空白字符。

您可以配置Vim来实现这一点吗?如果有,怎么做?


当前回答

我在评论中看到了这个解决方案 删除不需要的空格

我真的很喜欢。添加。在多余的空白上。

把这个放到你的。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()

其他回答

我既突出显示现有的尾随空白,也去掉尾随空白。

我配置我的编辑器(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()

如果要删除空白,应该只对已经是干净的文件进行处理。“在罗马的时候……”在不欢迎虚假更改的代码库上工作时,这是一种良好的礼仪。

此函数检测尾随空格,并仅在已经清除的情况下开启修剪。

这个想法的功劳来自这里的一个评论:https://github.com/atom/whitespace/issues/10(有史以来最长的bug票评论流)

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

我在这里找到了答案。

在我的.vimrc文件中添加以下内容就成功了:

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

末尾的标志表示如果搜索模式失败,该命令不会发出错误消息。。更多信息请参见:h:s_flags。

从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\+$/

我通常也有一个:

match Todo /\s\+$/

在我的.vimrc文件中,使行末空格高亮显示。

Todo是一个语法高亮组名,用于高亮Todo、FIXME或XXX等关键字。它有一个讨厌的丑陋的黄色背景色,我发现它是最好的突出你不想在你的代码中的东西:-)