Как мне заменить или найти непечатаемые символы в vim regex? - PullRequest
35 голосов
/ 02 октября 2010

У меня есть файл с некоторыми непечатными символами, которые отображаются как ^ C или ^ B, я хочу найти и заменить эти символы, как мне это сделать?

Ответы [ 6 ]

62 голосов
/ 21 апреля 2013

Удаление только контрольных символов:

:%s/[[:cntrl:]]//g

Удаление непечатных символов (обратите внимание, что в версиях, предшествующих ~ 8.1.1, также удаляются не-ASCII символы):

:%s/[^[:print:]]//g

Разницу между ними можно увидеть, если у вас есть несколько непечатаемых неконтролирующих символов, например пробел нулевой ширины :

enter image description here

34 голосов
/ 02 октября 2010

Скажем, вы хотите заменить ^ C на C:

:%s/<kbd>Ctrl</kbd><kbd>V</kbd><kbd>C</kbd>/C/g

Где Ctrl V C означает тип V, а затем C, удерживая нажатой Ctrl .

Ctrl V позволяет вводить управляющие символы.

10 голосов
/ 14 февраля 2012

Попробуйте это после сохранения вашего файла в vim (при условии, что вы находитесь в среде Linux)

:%!tr -cd '[:print:]\n'
6 голосов
/ 15 декабря 2016

Ни один из ответов здесь с использованием управляющих символов Vim не работал для меня. Я должен был ввести диапазон Unicode.

:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g

Этот диапазон Юникода был найден в этом другом сообщении: https://stackoverflow.com/a/8171868/231914

5 голосов
/ 02 октября 2010

Вы можете использовать префикс CTRL-V, чтобы ввести их, или, если их нелегко набрать, дерните и вставьте их, используя CTRL-R ".

5 голосов
/ 02 октября 2010

Вы можете использовать:

:%s/^C//g

Чтобы получить ^C, удерживая клавишу управления, нажмите V, затем C (оба, удерживая клавишу управления), и появится ^C. Это найдет все вхождения и заменит их ничем.

Чтобы удалить ^C и ^B, вы можете сделать:

:%s/^C\|^B//g
...