Tôi tiếp tục nhận được ^M
ký tự trong vimrc của tôi và nó phá vỡ cấu hình của tôi.
:digraphs
trong vim hiển thị bảng sơ đồ mà @LightnessRacesinOrbit liên kết đến.
preg_replace('/[\x01]/', ' ' ,$str);
Hy vọng điều này có ích.
Tôi tiếp tục nhận được ^M
ký tự trong vimrc của tôi và nó phá vỡ cấu hình của tôi.
:digraphs
trong vim hiển thị bảng sơ đồ mà @LightnessRacesinOrbit liên kết đến.
preg_replace('/[\x01]/', ' ' ,$str);
Hy vọng điều này có ích.
Câu trả lời:
Unix sử dụng 0xA cho một ký tự dòng mới. Windows sử dụng kết hợp hai ký tự: 0xD 0xA. 0xD là ký tự trở lại vận chuyển. ^M
tình cờ là cách vim hiển thị 0xD (0x0D = 13, M là chữ cái thứ 13 trong bảng chữ cái tiếng Anh).
Bạn có thể xóa tất cả các ^M
ký tự bằng cách chạy như sau:
:%s/^M//g
Nơi ^M
được nhập bằng cách giữ Ctrlvà gõ vtheo sau m, và sau đó phát hành Ctrl. Điều này đôi khi được viết tắt là ^V^M
, nhưng lưu ý rằng bạn phải nhập nó như được mô tả trong câu trước, thay vì gõ nó ra theo nghĩa đen.
Biểu thức này sẽ thay thế tất cả các lần xuất hiện ^M
bằng chuỗi rỗng (nghĩa là không có gì). Tôi sử dụng điều này để loại bỏ các ^M
tệp được sao chép từ Windows sang Unix (Solaris, Linux, OSX).
^M
ký tự nếu tệp có kết thúc dòng không khớp. Sử dụng lệnh được cung cấp bởi Tomasz, sau đó nhập :fileformat={unix|dos|mac}
tùy thuộc vào hệ điều hành bạn đang nhắm mục tiêu. Nếu chỉ có một vài dòng mà không có ^M
nhân vật, có lẽ bạn muốn :fileformat=dos
. Nếu bạn đang chỉnh sửa các tệp trong trình soạn thảo không phải là vim, hãy chắc chắn rằng nó được cấu hình để khớp với các kết thúc dòng (Notepad sẽ không làm điều này, nhưng bất kỳ trình chỉnh sửa có uy tín nào như Notepad ++ hoặc TextMate sẽ).
vi
, lệnh đó cần phải được nhập bằng tay. Chỉ cần dán nó vào một thiết bị đầu cuối mở với vi
việc chạy sẽ dẫn đến lỗi "không tìm thấy mẫu".
:%s/\r//g
để thay thế trả lại vận chuyển trong tệp của mình. Không thể tìm thấy mẫu ^ V ^ M trong tệp Tôi có một loạt các ký tự ^ M trong
:%s/\r//g
làm việc cho tôi ngày hôm nay. Nhưng tình hình của tôi có thể hơi khác một chút.
:%s/\r//
sẽ đủ.
Để dịch dòng mới thay vì xóa nó:
:%s/\r/\r/g
\r
có hành vi khác nhau trong phần tìm kiếm so với phần thay thế. Xem stackoverflow.com/a/3834303 chẳng hạn.
:%s/\r//g
Tôi đã nhận được một tệp văn bản ban đầu được tạo trên Windows Machine bằng cách sử dụng máy Mac và cần nhập tệp đó vào Linux MySQL DB bằng cách sử dụng load data
lệnh.
Mặc dù VIM hiển thị ký tự '^ M', nhưng không có cách nào ở trên hoạt động cho vấn đề cụ thể của tôi, dữ liệu sẽ nhập nhưng luôn bị hỏng theo một cách nào đó. Giải pháp cuối cùng khá dễ dàng (sau nhiều thất vọng).
Giải pháp: Thực hiện dos2unix
TWICE trên cùng một tệp đã thực hiện thủ thuật! Sử dụng file
lệnh cho thấy những gì đang xảy ra trên đường đi.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
Và phiên bản cuối cùng của tệp được nhập hoàn hảo vào cơ sở dữ liệu.
Trong Unix có lẽ dễ sử dụng lệnh 'tr' hơn.
cat file1.txt | tr "\r" "\n" > file2.txt
Tôi loại bỏ tất cả chúng bằng sed:
sed -i -e 's/\r//g' <filename>
Cũng có thể thay thế bằng một chuỗi hoặc ký tự khác:
sed -i -e 's/\r/string/g' <filename>
Các sed
lệnh này hoạt động trên phiên bản GNU / Linux sed
nhưng có thể cần điều chỉnh trên BSD (bao gồm cả macOS).
Bạn có thể sửa lỗi này trong vim bằng
:1,$s/^V^M//g
Trong đó ^ là nhân vật điều khiển.
^M
.
Đây là điều duy nhất hoạt động trong trường hợp của tôi:
:e ++ff=dos
:wq
Nếu nó phá vỡ cấu hình của bạn và các ký tự ^ M được yêu cầu trong ánh xạ, bạn chỉ cần thay thế các ký tự ^ M bằng <Enter>
hoặc thậm chí<C-m>
(cả hai được nhập dưới dạng các chuỗi ký tự đơn giản, tương ứng là 7 và 5 ký tự).
Đây là cách duy nhất được đề xuất, lưu trữ mã khóa đặc biệt trong ánh xạ
Trong FreeBSD, bạn có thể xóa ^M
thủ công bằng cách nhập như sau:
:%s/
Ctrl+ V, sau đó Ctrl+ M, sau đó Ctrl+ Mmột lần nữa.
Nếu bạn không chỉ định một cách fileformat
cố ý khác (giả sử :e ++ff=unix
đối với tệp Windows), có khả năng tệp đích đã trộn EOL.
Ví dụ: nếu một tệp có một số dòng có <CR><NL>
kết thúc và các dòng khác có
<NL>
kết thúc và fileformat
được unix
Vim đặt thành tự động khi đọc nó, ^M (<CR>)
sẽ xuất hiện. Trong trường hợp như vậy, fileformats
đi vào chơi. Xem :help ffs
để biết chi tiết.