2009-07-23 31 views
31

Tôi đang cố gắng sử dụng chế độ hexl để xóa thủ công một số ký tự đặc biệt khỏi tệp văn bản và không thấy cách xóa mọi thứ ở chế độ hexl.Trong emacs, làm thế nào để dải CR (^ M) và để lại LF (^ J) ký tự?

Điều tôi thực sự muốn là xóa bỏ dấu xuống dòng và giữ các ký tự linefeed. Chế độ Hexl có đúng cách để làm điều này không?

+0

Nếu đó là một tập tin văn bản ... tại sao chế độ sử dụng hexl? –

+0

Tôi đang cố gắng loại bỏ một dấu xuống dòng và để lại một dòng nguồn cấp dữ liệu ... không hỏi - chương trình đọc tập tin cấu hình này muốn theo cách đó. –

+1

+1 Tôi gặp vấn đề tương tự. Đối với một số lý do lẻ, một loạt các ký tự hex được thêm vào đầu của một số tệp văn bản của tôi. Tôi chỉ muốn xóa các ký tự đó, nhưng không thể nhìn thấy chúng trong chế độ đệm thông thường. Tại sao tính năng "xóa" quá khó cho chế độ hexl? Nó phải ở đó. – User1

Trả lời

10

Không cần chế độ hexl cho việc này. Chỉ cần thực hiện tìm kiếm và thay thế toàn cầu^J^M với^J Hoạt động cho tôi. :) Sau đó lưu tệp, xóa bộ đệm và truy cập lại tệp để cửa sổ hiển thị chế độ tệp mới (Unix vs DOS).

+0

Điều này luôn hoạt động đối với tôi. – Cheeso

+2

Tại sao thậm chí bận tâm để làm điều này? Làm những gì keysersoze gợi ý và sử dụng dos2unix và/hoặc unix2dos. –

+0

Thay vì giết bộ đệm và xem lại tệp, bạn có thể nhấp vào chỉ báo loại EOL trong dòng chế độ để xoay vòng qua các tùy chọn khác nhau. Bằng cách này bạn sẽ không mất nhẫn giết của bạn. – phils

3

(ở chế độ hexl) Tôi không chắc chắn rằng bạn có thể xóa các ký tự. Tôi đã luôn chuyển đổi chúng thành không gian hoặc một số nhân vật khác, chuyển sang trình soạn thảo văn bản thông thường và xóa chúng ở đó.

+0

Giải pháp tuyệt vời, cảm ơn! – Anne

5

Nếu bạn muốn xóa bỏ dấu xuống dòng (thường được hiển thị là ^M) và để nguyên cấp dữ liệu đường. Bạn chỉ có thể truy cập tệp w/out bất kỳ chuyển đổi nào:

M-x find-file-literally /path/to/file 

Do tệp có trả về thường được hiển thị ở chế độ DOS (ẩn trả về vận chuyển). Dòng chế độ có thể hiển thị (DOS) ở bên trái.

Khi bạn đã thực hiện điều đó, ^M sẽ hiển thị và bạn có thể xóa chúng như bạn sẽ làm bất kỳ ký tự nào.

28

Rất tiếc.^J^M cần phải được nhập dưới dạng hai ký tự chữ. Sử dụng c-qc-j, c-qc-m và đối với chuỗi thay thế, hãy sử dụng c-qc-j.

+0

Tôi không thể tin được số phiếu bầu này có bao nhiêu phiếu! Điều này sẽ hoàn toàn tiết kiệm một người mới (hoặc quên) Emacs người dùng! –

+1

Có, điều này sẽ cao hơn. Ngoài ra, bạn chỉ có thể thay thế^M và bỏ qua^J. – ahonnecke

9

Ngoài ra còn có một công cụ dòng lệnh được gọi là unix2dos/dos2unix tồn tại cụ thể để chuyển đổi kết thúc dòng.

4

Bạn không cần sử dụng chế độ hexl. Thay vào đó:

  • mở tệp theo cách hiển thị cho bạn^M's. Xem M-x tìm-tệp-theo nghĩa đen/đường dẫn/đến/tệp ở trên. Trong XEmacs bạn cũng có thể làm C-u C-x C-f và chọn mã hóa nhị phân.
  • chọn chuỗi bạn muốn thay thế và sao chép nó bằng cách sử Mw
  • làm M% (query thay thế) và dán những gì bạn muốn sao chép sử dụng Cy
  • hiện Enter khi nhắc gì thay thế nó với
  • thể nhấn ! bây giờ để thay thế tất cả các lần xuất hiện

Vấn đề là ngay cả khi bạn không nhập vào những gì bạn đang cố thay thế, bạn luôn có thể chọn/sao chép nó.

+0

Cảm ơn, không biết về tìm-tệp-theo nghĩa đen, thực sự là một công cụ tốt hơn để xem các ký tự điều khiển trong các tệp văn bản hơn chế độ hexl mà tôi đã sử dụng. –

8

Giả sử bạn muốn tập tin mã hóa DOS được thay đổi thành mã hóa UNIX, hãy sử dụng M-x set-buffer-file-coding-system (C-x RET f) để đặt hệ thống mã hóa thành "unix" và lưu tệp.

1

Từ http://www.xsteve.at/prg/emacs/xsteve-functions.el:

;02.02.2000 
(defun xsteve-remove-control-M() 
    "Remove ^M at end of line in the whole buffer." 
    (interactive) 
    (save-match-data 
    (save-excursion 
     (let ((remove-count 0)) 
     (goto-char (point-min)) 
     (while (re-search-forward (concat (char-to-string 13) "$") (point-max) t) 
      (setq remove-count (+ remove-count 1)) 
      (replace-match "" nil nil)) 
     (message (format "%d ^M removed from buffer." remove-count)))))) 

Thêm phần này vào .emacs bạn và chạy nó qua M-x xsteve-remove-control-M hoặc ràng buộc nó vào một phím dễ dàng hơn. Nó sẽ xóa ^M s trong anymode.

+1

Đây là một giải pháp tuyệt vời. Một lệnh để sửa toàn bộ tập tin ngay lập tức. – DOKKA

80

Không cần phải tìm thay thế. Chỉ dùng.

M-x delete-trailing-whitespace 

Bạn cũng có thể thiết lập mã hóa tập tin thông qua

C-x RET f unix 
+0

Đặt mã hóa tệp đã giải quyết được sự cố của tôi! – Ajoy

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