2010-10-02 14 views

risposta

27

dire che si desidera sostituire^C con C:

:%s/CtrlVC/C/g

Dove CtrlVC significa tipo V, allora C tenendo premuto Ctrl premuto.

CtrlV consente di immettere caratteri di controllo.

+3

È inoltre possibile utilizzare Ctrl-Q. Questo è utile per alcuni utenti che eseguono il mapping di Ctrl-V alle operazioni negli appunti –

5

È possibile utilizzare:

:%s/^C//g 

Per ottenere risultati ^C premuto il tasto di controllo, premere V quindi C (Sia tenendo premuto il tasto di controllo) e apparirà la ^C. Questo troverà tutte le occorrenze e le sostituirà con nulla.

Per rimuovere sia ^C e ^B si può fare:

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

È possibile utilizzare il prefisso CTRL-V di entrare loro, o se non sono facilmente tipizzabile, Yank e inserire utilizzando CTRL-R".

8

Prova questo dopo aver salvato il file in vim (supponendo che si sono in ambiente Linux)

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

per favore spiega questo giorno salvando il magico voodoo! – Prospero

+3

@JamesAndino: ':%' filtra tutte le righe usando il programma esterno ('!') 'Tr', che _removes_ (' -d') tutti i caratteri che sono _not_ ('-c') _printable_ (' [: print: ] ') o _newline_ (' \ n'). – quasimodo

+2

Non è compatibile con Unicode, poiché è una classe di caratteri POSIX (http://en.wikipedia.org/wiki/Regular_expression#Character_classes). Quindi se hai YAML con dati come 你好, 'tr' spoglierà i dati Unicode quando userai' [: print:] '. – ash

51

Rimozione solo simboli di controllo:

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

rimuovendo i caratteri non stampabili (rimuove i caratteri non ASCII anche):

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

Almeno fino a vim 7.3 [: print:] corrisponde solo ai caratteri stampabili ASCII (modificato la risposta per avvisare i lettori di questo fatto) – ndemou

+0

@ndemou Questo è difficile, con il [] attorno a [: print:] il^dovrebbe invertire corrisponde e restituisce qualsiasi non stampabile. O forse quella era la tua modifica? – dragon788

+0

@ dragon788, sì, ero a conoscenza di come funziona quando ho scritto il mio commento. Prova la 2 regex sul testo con caratteri Unicode stampabili al di fuori della tabella ASCII per capire il mio commento (rimuoverà i caratteri Unicode). – ndemou

4

Nessuna delle risposte qui utilizzando i caratteri di controllo di Vim ha funzionato per me. Ho dovuto inserire un intervallo Unicode.

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

Quella gamma unicode è stato trovato su questo altro post: https://stackoverflow.com/a/8171868/231914

+0

Poiché TAB è considerato non stampabile, quindi [[: cntrl:]] e [^ [: print:]] corrispondono a TAB (0x9, C-I) – mosh

Problemi correlati