При программировании или открытии текстовых файлов довольно часто встречаются файлы с конечным пробелом в конце строки. У vim есть способ показать это, установив trail
опцию в listchars
опции и затем включив list
.
Тем не менее, каков самый простой способ устранить этот пробел в глобальном масштабе по всему файлу (в идеале без плагина)?
whitespace
line-breaks
Эндрю Ферье
источник
источник
:h vim-faq
и искать/trailing
. Трудно запомнить тег:h faq-12.1
.Ответы:
Используйте связывание клавиш, чтобы убрать все конечные пробелы
Так как некоторые страницы, которые я редактирую, на самом деле нуждаются в конечных пробелах (например, уценке), а другие нет, я установил привязку к клавишам F5так, чтобы это было тривиально, не будучи автоматическим. Для этого добавьте приведенный ниже код (из vim.wikia) или его разновидность
.vimrc
:nnoremap <F5>
выполняет нерекурсивное сопоставление с ключомF5
в обычном режиме:let _s=@/
сохраняет последний поисковый запрос (из макроса@/
) в переменной_s
<Bar>
Функционирует как символ канала|
для разделения команд, однако|
в этом контексте завершает команду, поэтому<Bar>
должен использоваться вместо этого.:%s/\s\+$//e
ищет конечные пробелы и удаляет их повсюду в буфере ( подробный анализ этого выражения см. в ответе CarpetSmoker )let @/=_s
восстанавливает ваш последний поисковый запрос в макросе@/
, чтобы он был доступен при следующем нажатииn
.<CR>
заканчивает отображение... или быть более избирательным
Если у вас есть случаи, когда вы не хотите убирать все конечные пробелы, вы можете использовать шаблон, чтобы быть более избирательным. Например, следующий код показывает, как я удаляю конечные пробелы, только если они идут после точки с запятой (здесь она связана с F8).
Это полезно, если, как и у меня, у вас есть некоторые файлы с heredocs, подобными markdown, перемежающиеся между запятыми точкой с запятой.
источник
:keeppatterns
предотвратить переопределение@/
. А также взглянуть на:keepjumps
.:help keeppattern
и ничего не получил.:nohl
любым из них, если, если вы что-то подсвечивали, он продолжит подсвечивать это (см. мой обновленный ответ).Самый простой способ - просто использовать
:substitute
::%s
работать:substitute
над диапазоном%
, который является всем буфером.\s
не соответствует всем пробельным символам.\+
повторить их 1 или более раз.$
закрепить в конце линии.e
Флаг не выдаст ошибку , если нет совпадения (то есть файл уже без конечных пробелов).Однако это, вероятно, не самый лучший способ, поскольку он вызывает два побочных эффекта:
Вы можете исправить оба элемента, превратив это в функцию:
И затем используйте это как:
winsaveview()
Сохранят текущий «вид», который включает в себя положение курсора, складывает, скачет и т.д.winrestview()
в конце будет восстановить это из сохраненных переменных.:keeppatterns
Предотвращает\s\+$
образец от добавления в истории поиска.Так как вводить текст постоянно раздражает
:call
, вы можете определить команду:Который может быть использован без
:call
:И вы можете, конечно, связать его с ключом:
Некоторым людям нравится делать это автоматически перед записью файла на диск, например так:
Мне это не нравится, так как некоторые форматы требуют конечного пробела (например, Markdown), а в некоторых других случаях вы даже хотите использовать конечный пробел в своем коде (например, форматирование электронного письма и использование
--<Space>
маркера для указания начала подписи). ).Бесстыдный режим плагинов: некоторое время назад я написал небольшой скрипт на Python для очистки пробелов сразу для всего проекта.
источник
`
дважды после завершения замены. Это открывает возможность для создания oneliner, как это:%s/\s\+$//e | exe "normal ``"
Чтобы удалить все конечные пробелы (в конце каждой строки), вы можете использовать команду:
Чтобы включить вкладки, используйте
\s
вместо пробела.Из командной строки:
Все файлы в текущем каталоге (рекурсивно использовать
**/*.*
):Python путь:
или же:
Используйте
lstrip()
для левой полосы (задней),rstrip()
для правой полосы (ведущей) илиstrip()
для удаления с обоих концов.Вот полезная функция, которая удаляет лишние пробелы в конце строки, которые вы можете добавить к своей
.vimrc
:Для этого есть также плагин DeleteTrailingWhitespace .
Подсветка пробелов
Чтобы перепроверить все ли пробелы в конце, используйте:
Типа,
/ $
чтобы найти их. Если они есть, vim выделит их для вас.Используйте цвета, чтобы выделить их:
Используйте видимые символы ( источник ):
Смотрите также: выделите ненужные места
Чтобы выделить конечные пробелы по умолчанию, вы можете настроить
.vimrc
следующие параметры:Удаление пробелов по умолчанию
Если вы хотите убедиться, что все конечные пробелы в файле автоматически удаляются при сохранении, вы можете добавить следующую команду в свой
.vimrc
:что не рекомендуется, так как он удаляет конечные пробелы из каждого файла, который пользователь сохраняет (даже там, где пробелы могут быть желательны).
Смотрите также:
источник
Немного поясняю ответ Кристофера Боттомса : Джонатан Паларди написал хорошую статью на эту тему . В нем он пишет функции,
Preserve(command)
которые сохраняют состояние редактора (главным образом, положение курсора и последний шаблон поиска) при выполнении произвольной команды:Это имеет многоцелевое преимущество, например, вы можете использовать его для замены всех конечных пробелов (как это делает Джонатан), сопоставив это с:
Вы также можете использовать его для отображения в визуальном режиме, чтобы просто удалить конечные пробелы в визуально выбранных строках:
И вы можете использовать его для других вызовов, например, для форматирования всего документа
=
, сохраняя свое место (на этот раз используйте другой ключ, чтобы не конфликтовать):В общем, я обнаружил, что эта
Preserve(command)
функция - хороший инструмент.источник
@/
не нужно требовать дурака (в любом случае, в этом случае).winsaveview()
иwinrestview()
намного выше.Другая версия функции StripTrailingSpaces:
В действительности это ошибка в этой функции (эта): возможность не сохраняется из-за опции «range». если он удален, он работает очень хорошо, однако я делюсь кодом, чтобы получить некоторую помощь.
Как вы можете видеть, он также использует функцию сохранения, показанную выше, но немного по-другому.
Разница здесь в том, что я могу выбрать диапазон строк или абзац с помощью,
vip
и тогда диапазон:'<,'>
автоматически появится в командной строке.Идея пришла из поста Без Эрмосо .
источник