У меня есть файл с некоторыми непечатными символами, которые отображаются как ^ C или ^ B, я хочу найти и заменить эти символы, как мне это сделать?
Удаление только контрольных символов:
:%s/[[:cntrl:]]//g
Удаление непечатных символов (обратите внимание, что в версиях, предшествующих ~ 8.1.1, также удаляются не-ASCII символы):
:%s/[^[:print:]]//g
Разницу между ними можно увидеть, если у вас есть несколько непечатаемых неконтролирующих символов, например пробел нулевой ширины :
Скажем, вы хотите заменить ^ C на C:
:%s/<kbd>Ctrl</kbd><kbd>V</kbd><kbd>C</kbd>/C/g
Где Ctrl V C означает тип V, а затем C, удерживая нажатой Ctrl .
Ctrl V позволяет вводить управляющие символы.
Попробуйте это после сохранения вашего файла в vim (при условии, что вы находитесь в среде Linux)
:%!tr -cd '[:print:]\n'
Ни один из ответов здесь с использованием управляющих символов Vim не работал для меня. Я должен был ввести диапазон Unicode.
:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g
Этот диапазон Юникода был найден в этом другом сообщении: https://stackoverflow.com/a/8171868/231914
Вы можете использовать префикс CTRL-V, чтобы ввести их, или, если их нелегко набрать, дерните и вставьте их, используя CTRL-R ".
CTRL-V
CTRL-R
"
Вы можете использовать:
:%s/^C//g
Чтобы получить ^C, удерживая клавишу управления, нажмите V, затем C (оба, удерживая клавишу управления), и появится ^C. Это найдет все вхождения и заменит их ничем.
^C
V
C
Чтобы удалить ^C и ^B, вы можете сделать:
^B
:%s/^C\|^B//g