Я получаю ошибки «конечный пробел» при попытке зафиксировать некоторые файлы в git.
Я хочу автоматически удалить эти завершающие пробельные символы непосредственно перед сохранением файлов Python.
Можете ли вы настроить Vim для этого? Если да, то как?
vim
automation
whitespace
removing-whitespace
Пол Д. Иден
источник
источник
Ответы:
Я нашел ответ здесь .
Добавление следующего в мой файл .vimrc помогло.
источник
e
в конце означает, что если мы не нашли шаблон, vi не считает заменяющую команду неудачнойКомпиляция выше плюс сохранение позиции курсора:
Если вы хотите применить это при сохранении к любому файлу, пропустите второй
autocmd
и используйте подстановочный знак*
:источник
autocmd FileType c,cpp,java,php,ruby,python
часть, чтобы применить ее ко всем файлам.<buffer>
на,*
если вы хотите, чтобы он работал на всех файлахkeepp
keepp %s/\s\+$//e
У меня также обычно есть:
в моем
.vimrc
файле, так что пробелы в конце строки подсвечиваются.Todo - это название группы с подсветкой синтаксиса, которая используется для подсветки ключевых слов, таких как
TODO
,FIXME
илиXXX
. Он имеет неприятно уродливый желтоватый цвет фона, и я считаю, что лучше всего выделять то, что вам не нужно в вашем коде :-)источник
:hi Todo
. Так что я просмотрел:hi <Tab>
и:help hi
. Я считалCursor
иError
, но я думаю , что я буду старатьсяmatch VisualNOS /\s\+$/
. Я мог бы объединить это с некоторымиautocmd
из других ответов здесь.Я выделил существующий конечный пробел и также удалил конечный пробел.
Я настраиваю свой редактор (vim), чтобы он показывал пробел в конце, например
с этим в нижней части моего .vimrc:
и я автоматически удаляю его из файлов при сохранении, в моем случае * .rb для файлов ruby, снова в моем ~ / .vimrc
источник
Вот способ фильтрации по нескольким типам файлов.
источник
Скопировано и вставлено с http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html (ссылка больше не работает, но нужный вам бит находится ниже)
«Это имеет то преимущество, что не выделяет каждый пробел, который вы вводите в конце строки, только когда вы открываете файл или выходите из режима вставки. Очень аккуратно».
источник
Я видел это решение в комментарии на VIM Wikia - Удалить ненужные места
Мне действительно это понравилось. Добавляет
.
на нежелательные пробелы.Поместите это в свой
.vimrc
источник
Вот как я это делаю. Я не могу вспомнить, где я украл это из ТБХ.
источник
%s
глобальный (g) флаг так же бесполезен, как пробел в EOL :-)Решение, которое просто удаляет конечные пробелы из файла, неприемлемо при любых обстоятельствах. Он будет работать в проекте, в котором с самого начала применялась эта политика, и поэтому нет таких пробелов, которые вы просто не добавили в предстоящий коммит.
Предположим, вы хотите просто не добавлять новые экземпляры конечного пробела, не затрагивая существующие пробелы в строках, которые вы не редактировали, чтобы сохранить ваш коммит свободным от изменений, которые не имеют отношения к вашей работе.
В этом случае с git вы можете использовать такой скрипт:
То есть мы храним изменения, а затем фильтруем все
+
строки в diff, чтобы удалить их пробелы, когда мы повторно применяем изменения к рабочему каталогу. Если этот командный канал успешен, мы сбрасываем тайник.источник
Другие подходы здесь как-то не работают для меня в MacVim при использовании в
.vimrc
файле. Итак, вот что делает и выделяет конечные пробелы:источник
set listchars=trail:·
говоря:E474: Invalid argument: listchars=trail:·
. Можете ли вы подтвердить свой пример?autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>
источник
Для людей, которые хотят запустить его для определенных типов файлов (FileTypes не всегда надежны):
Или с vim7:
источник
Если вы удаляете пробелы, вы должны делать это только с файлами, которые уже очищены. "Когда в Риме...". Это хороший этикет при работе с кодовыми базами, где нежелательные изменения нежелательны.
Эта функция обнаруживает конечные пробелы и включает обрезку, только если она уже была чистой.
В основе этой идеи лежит комментарий: https://github.com/atom/whitespace/issues/10 (самый длинный поток комментариев об ошибках в истории)
источник
let _s=@/
и восстановить его в конце `let @ / = _ s`. В этом случае мы используем регистр черной дыры