2010-10-02 9 views

ответ

27

Допустим, вы хотите заменить^C с C:

:%s/CtrlVC/C/g

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

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

+3

Вы также можете использовать Ctrl-Q. Это полезно для некоторых пользователей, которые отображают Ctrl-V в операциях с буфером обмена –

5

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

:%s/^C//g 

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

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

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

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

8

Попробуйте после сохранения файла в Vim (если вы находитесь в среде Linux)

:%!tr -cd '[:print:]\n' 
+6

, пожалуйста, объясните этот день, сохранив волшебное вуду! – Prospero

+3

@JamesAndino: ':%' фильтрует все строки, используя внешнюю ('!') Программу 'tr', которая _removes_ (' -d') все символы, которые _not_ ('-c') _printable_ (' [: print: ] ') или _newline_ (' \ n'). – quasimodo

+2

Это не подходит для Unicode, так как это класс символов POSIX (http://en.wikipedia.org/wiki/Regular_expression#Character_classes). Поэтому, если у вас есть YAML с данными типа 你好, 'tr' будет удалять данные Unicode при использовании' [: print:] '. – ash

51

Удаление символов управления:

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

Удаление непечатаемых символов (удаляет не-ASCII символы также):

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

По крайней мере, до vim 7.3 [: print:] соответствует только символам ASCII для печати (отредактирован ответ, чтобы предупредить читателей об этом факте) – ndemou

+0

@ndemou Это сложно, с [] вокруг [: print:] the^следует инвертировать сопоставлять и возвращать любые непечатаемые. Или, возможно, это было ваше редактирование? – dragon788

+0

@ dragon788, да, я знал, как это работает, когда я написал свой комментарий. Попробуйте второе регулярное выражение по тексту с печатными символами Юникода за пределами таблицы ASCII, чтобы понять мой комментарий (он удалит символы Юникода). – ndemou

4

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

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

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

+0

Поскольку TAB считается непечатаемым, значит, эти [[: cntrl:]] и [^ [: print:]] соответствуют TAB (0x9, C-I) – mosh

Смежные вопросы