2010-10-02 29 views

Trả lời

27

Giả sử bạn muốn thay thế^C với C:

:%s/CtrlVC/C/g

đâu CtrlVC nghĩa loại V sau đó C trong khi giữ Ctrl ép.

CtrlV cho phép bạn nhập các ký tự điều khiển.

+3

Bạn cũng có thể sử dụng tổ hợp phím Ctrl-Q. Điều này rất hữu ích cho một số người dùng bản đồ Ctrl-V vào hoạt động clipboard –

5

Bạn có thể sử dụng:

:%s/^C//g 

Để có được ^C giữ phím điều khiển, bấm V sau đó C (Cả trong khi giữ phím điều khiển) và ^C sẽ xuất hiện. Điều này sẽ tìm thấy tất cả các lần xuất hiện và thay thế chúng bằng không có gì.

Để loại bỏ cả hai ^C^B bạn có thể làm:

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

Bạn có thể sử dụng tiền tố CTRL-V nhập chúng, hoặc nếu họ không dễ dàng typeable, yank và chèn chúng bằng cách sử CTRL-R".

8

Hãy thử điều này sau khi tiết kiệm tập tin của bạn trong vim (giả sử bạn đang ở trong môi trường Linux)

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

, hãy giải thích ngày này để lưu ma thuật voodoo! – Prospero

+3

@JamesAndino: ':%' lọc tất cả các dòng bằng cách sử dụng chương trình bên ngoài ('!') 'Tr', mà _removes_ (' -d') tất cả các ký tự _not_ ('-c') _printable_ (' [: print: ] ') hoặc _newline_ (' \ n'). – quasimodo

+2

Đây không phải là Unicode thân thiện, vì nó là một lớp nhân vật POSIX (http://en.wikipedia.org/wiki/Regular_expression#Character_classes). Vì vậy, nếu bạn có YAML với dữ liệu như 你好, 'tr' sẽ tách dữ liệu Unicode khi sử dụng' [: print:] '. – ash

51

Loại bỏ chỉ là biểu tượng kiểm soát:

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

Loại bỏ các ký tự không in được (loại bỏ các ký tự ASCII cũng):

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

Ít nhất cho đến khi vim 7.3 [: print:] chỉ khớp với các ký tự in được ASCII (đã chỉnh sửa câu trả lời để cảnh báo cho người đọc về thực tế này) – ndemou

+0

@ndemou Điều này rất khó, với ký tự [] xung quanh [: print:]^khớp và trả lại bất kỳ nội dung nào không thể in được. Hoặc có lẽ đó là chỉnh sửa của bạn? – dragon788

+0

@ dragon788, vâng tôi đã biết cách hoạt động khi tôi viết bình luận của mình. Hãy thử regex thứ hai trên văn bản với các ký tự Unicode có thể in bên ngoài bảng ASCII để hiểu nhận xét của tôi (nó sẽ loại bỏ các ký tự Unicode). – ndemou

4

Không có câu trả lời nào ở đây sử dụng ký tự điều khiển của Vim phù hợp với tôi. Tôi phải nhập một dãy unicode.

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

Đó phạm vi unicode đã được tìm thấy về bài đăng này khác: https://stackoverflow.com/a/8171868/231914

+0

Vì TAB được coi là không thể in nên các [[: cntrl:]] và [^ [: print:]] khớp với TAB (0x9, C-I) – mosh

Các vấn đề liên quan