Я получаю ошибки «пробел в пробелах» при попытке зафиксировать некоторые файлы в git.
Я хочу автоматически удалить эти завершающие пробельные символы непосредственно перед сохранением файлов Python.
Можете ли вы настроить vim для этого? Если да, то как?
Если вы удаляете пробелы, вы должны только делать это с файлами, которые уже очищены. "Когда в Риме...". Это хороший этикет при работе с кодовыми базами, где нежелательные изменения нежелательны.
Эта функция обнаруживает конечные пробелы и включает обрезку, только если она уже очищена.
В пользу этой идеи лежит комментарий: 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
Для людей, которые хотят запустить его для определенных типов файлов (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
autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>