скачать - команда vim git




Как вы можете автоматически удалить конечные пробелы в vim (9)

Вот как я это делаю. Я не могу вспомнить, где я украл его с tbh.

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

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

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

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


Вот способ фильтрации более чем одним файловым типом.

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

Другие подходы здесь как-то не работали для меня в MacVim при использовании в файле .vimrc . Итак, вот что делает и выделяет конечные пробелы:

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

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

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

Кредит для этой идеи относится к жемчужине комментария здесь: 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

Решение, которое просто удаляет конечные пробелы из файла, неприемлемо при любых обстоятельствах. Он будет работать в проекте, у которого была эта политика с самого начала, и поэтому нет таких пробелов, что вы не просто добавили себя в предстоящую фиксацию.

Предположим, вам просто не нужно добавлять новые экземпляры конечных пробелов, не затрагивая существующие пробелы в строках, которые вы не редактировали, чтобы ваша команда не имела изменений, которые не имеют отношения к вашей работе.

В этом случае с помощью 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, чтобы удалить их конечные пробелы, поскольку мы повторно применяем это изменение к рабочему каталогу. Если этот командный канал успешный, мы бросаем трюк.


Скопировано и вставлено с 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\+$/

Я видел это решение в комментарии в here

Мне действительно это понравилось. Добавляет a . на нежелательных белых пространствах.

Поместите это в свой .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()

и я 'автоматически-strip' его из файлов при их сохранении, в моем случае * .rb для рубиновых файлов, снова в моем ~ / .vimrc

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

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





removing-whitespace