2009-11-04 26 views
16

Tôi đã có các chức năng này trong tập tin .emacs.el của tôi trong nhiều năm qua:Làm thế nào để cấu hình GNU Emacs để ghi tập tin định dạng UNIX hoặc DOS theo mặc định?

(defun dos2unix() 
    "Convert a DOS formatted text buffer to UNIX format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-unix nil)) 

(defun unix2dos() 
    "Convert a UNIX formatted text buffer to DOS format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-dos nil)) 

Các chức năng này cho phép tôi dễ dàng chuyển đổi giữa các định dạng, nhưng tôi không chắc chắn làm thế nào để cấu hình Emacs để viết trong một định dạng cụ thể bằng cách mặc định bất kể nền tảng nào tôi đang sử dụng. Như bây giờ, khi tôi chạy trên Windows, Emacs tiết kiệm trong định dạng Windows; khi tôi chạy trong UNIX/Linux, Emacs lưu ở định dạng UNIX.

Tôi muốn hướng dẫn Emacs viết ở định dạng UNIX bất kể nền tảng mà tôi đang chạy. Làm cách nào để thực hiện việc này?

Tôi có nên thêm một số móc chế độ văn bản gọi một trong các chức năng này không? Ví dụ: nếu tôi đang sử dụng Windows, hãy gọi dos2unix khi tôi tìm thấy tệp văn bản?

Trả lời

23

Tôi đã có một loạt các trong emacs của tôi:

(setq-default buffer-file-coding-system 'utf-8-unix) 
(setq-default default-buffer-file-coding-system 'utf-8-unix) 
(set-default-coding-systems 'utf-8-unix) 
(prefer-coding-system 'utf-8-unix) 

Tôi không biết đó là đúng, tôi chỉ mê tín.

+2

Ha! Đó là công cụ khá tốt. 1 cho thắt lưng và treo! –

+6

'setq-default' không 'set-default' là cách chính xác để thay đổi các biến trên. Nếu không, bạn cần báo giá tên biến. – e40

+0

Đã sửa các giá trị mặc định setq –

11

Tôi đã bỏ phiếu cho câu hỏi và câu trả lời, nhưng đã dành một vài phút để cải thiện thông tin, vì vậy tôi sẽ thêm nó.

Trước tiên, tôi đã kiểm tra tài liệu về từng biến và chức năng trong câu trả lời của user181548, bằng cách (cắt và dán lần đầu tiên vào Emacs), sau đó đặt con trỏ lên mỗi lần và nhập C-h v RETC-h f RET tương ứng.

này gợi ý rằng tôi chỉ có thể cần

(prefer-coding-system 'utf-8-unix) 

Thử nghiệm với các dòng khác dường như không thay đổi mã hóa đệm tồn tại từ trước (vui lòng nhập C-h C RET RET để kiểm tra (describe-coding-system) và g mỗi lần làm mới), vì vậy tôi bỏ qua các dòng khác và tạo ra một chìa khóa mang tính ràng buộc để nhanh chóng thay đổi bất kỳ tập tin cũ mà vẫn DOS, có nghĩa là,

(defun set-bfr-to-8-unx() 
    (interactive) 
    (set-buffer-file-coding-system 
    'utf-8-unix) 
) 
(global-set-key (kbd "C-c u") 
     'set-bfr-to-8-unx 
     ) 

Đối với tò mò, khám phá 3 và dòng thứ 4 của hàm trên, 01.234., tôi đã sử dụng C-x RET f RET để thay đổi mã hóa bộ đệm hiện tại theo cách thủ công, sau đó M-x command-history RET để xem cách các khóa đó dịch mã.

Bây giờ có thể cam kết của tôi sẽ ngừng rên rỉ về CR.

+0

BTW, macro bàn phím có thể hữu ích cho việc thay đổi mã hóa cho một tập hợp các tệp (ví dụ: từ dired). Các ràng buộc chính hiện đại cho việc này có thể được tìm thấy tại https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro. (Thay vì 'Cx (' vv, chúng ta có thể sử dụng 'F3' và' F4'.) –

+0

Được bỏ qua để loại bỏ sự thừa, rằng một dòng là tất cả những gì cần thiết cho mã hóa 'utf-8-unix' và' LF' Tôi nghĩ rằng tôi sẽ bổ sung đặt '(ngôn ngữ thiết lập-môi trường" UTF-8 ")' dựa trên [bài viết này] (http://ergoemacs.org/emacs/emacs_encoding_decoding_faq.html), nhưng quyết định tôi don ' Tôi cần nó. – legends2k

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