Как вы можете автоматически удалить конечные пробелы в Vim - PullRequest
193 голосов
/ 10 декабря 2008

Я получаю ошибки «пробел в пробелах» при попытке зафиксировать некоторые файлы в git.

Я хочу автоматически удалить эти завершающие пробельные символы непосредственно перед сохранением файлов Python.

Можете ли вы настроить vim для этого? Если да, то как?

Ответы [ 13 ]

0 голосов
/ 29 сентября 2016

Если вы удаляете пробелы, вы должны только делать это с файлами, которые уже очищены. "Когда в Риме...". Это хороший этикет при работе с кодовыми базами, где нежелательные изменения нежелательны.

Эта функция обнаруживает конечные пробелы и включает обрезку, только если она уже очищена.

В пользу этой идеи лежит комментарий: 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
0 голосов
/ 11 августа 2016

Для людей, которые хотят запустить его для определенных типов файлов (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
0 голосов
/ 01 июня 2015

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

...