你怎么能自动删除在vim尾随空白你怎么能自动删除在vim尾随空白(How can you autom

2019-05-12 12:58发布

我得到“结尾的空白”错误试图犯git的一些文件。

我想自动权利之前,我保存Python文件删除这些尾随空格字符。

你可以配置Vim来做到这一点? 如果是这样,怎么样?

Answer 1:

我找到了答案在这里 。

添加以下到我的.vimrc文件里没有的伎俩。

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


Answer 2:

上面加上节省的光标位置编译:

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()


Answer 3:

我通常还具有:

match Todo /\s\+$/

在我.vimrc文件中,所以行空白的那一端被加亮后。

藤堂是一个语法高亮显示组名称是用于高亮显示了关键字,比如TODOFIXMEXXX 。 它有一个烦人丑陋淡黄底色,我觉得这是最好的,以高亮显示您想要的东西在你的代码:-)



Answer 4:

余两个突出现有结尾的空白,并且还剥离前后的空白字符。

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

我和“自动带”从文件在我的〜/ .vimrc再次.RB红宝石文件,保存他们的时候,在我的情况*

function! TrimWhiteSpace()
    %s/\s\+$//e
endfunction
autocmd BufWritePre     *.rb :call TrimWhiteSpace()


Answer 5:

这里是一种由一个以上的文件类型进行过滤。

autocmd FileType c,cpp,python,ruby,java autocmd BufWritePre <buffer> :%s/\s\+$//e


Answer 6:

复制和粘贴从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\+$/


Answer 7:

我看到在评论这一解决方案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()


Answer 8:

这是我如何做。 我不记得我是从TBH偷走了。

autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
    %s/[ \t]\+$//ge
    %s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun


Answer 9:

简单地剥离从文件结尾的空白溶液不是在所有情况下是可接受的。 这将在已经从一开始这个政策的一个项目工作,所以没有这样的空白,你不只是增加自己在即将提交。

假设你希望只是不增加新的实例尾随空白的,没有,你没有编辑行影响现有的空白,以保持你的提交免费这无关你的工作变动。

在这种情况下,用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线以消除他们的尾随空白,因为我们重新申请更改到工作目录。 如果此命令管道是成功的,我们放弃了藏匿。



Answer 10:

其他方法在这里有点不为我的MacVim在使用时工作.vimrc文件。 因此,这里是一个没有和亮点尾随空格:

set encoding=utf-8
set listchars=trail:·
set list


Answer 11:

autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>



Answer 12:

对于谁想要运行特定的文件类型(文件类型并不总是可靠的)人:

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


Answer 13:

如果修剪空白,你只能做在那些已经干净的文件。 “在罗马的时候...”。 这是一个好礼仪在哪里虚假的变化是不受欢迎的代码库工作时。

此功能可检测尾随空白,并打开微调只有当它已经干净。

这一观点的信用去评论这里的宝石: 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


文章来源: How can you automatically remove trailing whitespace in vim