У меня есть файл с некоторыми непечатаемыми символами, которые появляются как ^ C или ^ B, я хочу найти и заменить эти символы, как я могу это сделать?
Как заменить или найти непечатаемые символы в vim regex?
Ответ 1
Предположим, что вы хотите заменить ^ C на C:
:%s/CtrlVC/C/g
Где Ctrl V C означает тип V, затем C, удерживая нажатой кнопку Ctrl.
Ctrl V позволяет вводить управляющие символы.
Ответ 2
Удаление только контрольных символов:
:%s/[[:cntrl:]]//g
Удаление непечатаемых символов (обратите внимание, что в версиях, предшествующих ~ 8.1.1, также удаляются не-ASCII символы):
:%s/[^[:print:]]//g
Разницу между ними можно увидеть, если у вас есть несколько непечатаемых неконтролирующих символов, например, пробел нулевой ширины:
Ответ 3
Попробуйте это после сохранения файла в vim (если вы находитесь в среде Linux)
:%!tr -cd '[:print:]\n'
Ответ 4
Вы можете использовать:
:%s/^C//g
Чтобы получить ^C
, удерживайте клавишу управления, нажмите V
, затем C
(оба удерживания клавиши управления), и появится ^C
. Это найдет все вхождения и ничего не заменит.
Чтобы удалить как ^C
, так и ^B
, вы можете:
:%s/^C\|^B//g
Ответ 5
Вы можете использовать префикс CTRL-V
, чтобы ввести их, или, если они не легко могут быть напечатаны, выдерните и вставьте их, используя CTRL-R
"
.
Ответ 6
Ни один из ответов здесь, используя управляющие символы Vim, не работал у меня. Мне нужно было ввести диапазон юникодов.
:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g
Этот ряд unicode был найден в этом другом сообщении: fooobar.com/info/16405/...