Lưu tệp hiện tại với một tên hơi khác


17

Các tệp của tôi có tên tệp dài và một phần của tên tệp là ngày và số phiên bản. Thông thường tôi muốn lưu tệp trong bộ đệm bằng cách sử dụng gần như cùng tên, chỉ cần thay đổi số phiên bản hoặc ngày.

Điều này sẽ dễ dàng hơn nhiều, nếu tôi có một lệnh đặt tên tệp của bộ đệm hiện tại vào vòng khử, để tôi có thể mở tệp, sau đó nhập C-x C-w(ghi tệp), lấy tên hiện tại bằng Cy, thay đổi và lưu nó

Tôi đang sử dụng Emacs 24.3 trên Windows và 24.4 trên Linux. Tôi phải sử dụng tên tệp khác nhau và không git vì nhiều lý do. Tôi rất vui nếu lệnh này hoạt động với AocateeX / LaTeX là chế độ chính.


Chỉnh sửa 1:

Tôi đã mắc lỗi: Tôi không muốn nhập C-x C-f(= tìm tệp), nhưng C-x C-w(= ghi tệp). Tôi đã sửa lỗi này ở trên.

Chỉnh sửa 2:

Tìm thấy một câu hỏi và câu trả lời trùng lặp: /unix//a/45381 Nhưng không có câu trả lời nào tốt hơn!

Chỉnh sửa 3:

Tại đây: http://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.html là một chức năng, chọn phần "nondirectory" của tên tệp:

Chức năng: tên tệp tên tệp nondirectory

This function returns the nondirectory part of filename.

          (file-name-nondirectory "lewis/foo")
               ⇒ "foo"
          (file-name-nondirectory "foo")
               ⇒ "foo"
          (file-name-nondirectory "lewis/")
               ⇒ ""

Nếu tôi chỉ biết ...


Ồ, xin chào, Keks :) Tôi thực sự đã tự hỏi điều này nhiều lần ... câu hỏi hay. Và Lisp thật dễ dàng ......
Sean Allred

Chỉ cần tìm thấy câu hỏi này ... Vì tò mò: "nhiều lý do" cố vấn / đồng tác giả có liên quan ...?
mbork

1
@mbork Tôi là luật sư và viết thư cũng như hợp đồng. Mở một lá thư gần đây cho ai đó, đổi tên nó, xóa nội dung và bắt đầu viết một bức thư mới cho cùng một người nhanh hơn bắt đầu từ đầu. Nhưng liên quan đến các hợp đồng đổi tên chúng là một sự thay thế nghèo nàn cho một cvs, nhưng tôi chưa bao giờ gặp một luật sư khác sử dụng LaTeX và Git, vì vậy tôi phải đưa cho một phiên bản mới của hợp đồng một tên tệp mới ...
Keks Dose

Đủ công bằng. YASnippet thì sao? Có vẻ như rất phù hợp với trường hợp sử dụng của bạn.
mbork

@mbork Có, đối với các mẫu của tôi, tôi đang sử dụng YASnippets, kể từ nhiều năm. LaTeX, Emacs, orgmode, YASnippets làm cho PC của tôi đáng tin cậy hơn nhiều so với Word và Outlook. OK, tôi đang viết cái này trên máy Linux, nhưng đó là điều bạn thực sự không thể mong đợi từ bộ phận trợ giúp CNTT thông thường: hỗ trợ Linux thay vì Windows.
Keks Liều

Câu trả lời:


23

Không cần phải làm tất cả điều đó.

Đơn giản:

  1. Vẫn trong tập tin gốc, nhấn C-x C-w. Bạn sẽ được nhắc nhập tên tệp mới.
  2. Lượt M-nvà tên tệp hiện tại sẽ được chèn cho bạn.
  3. Chỉnh sửa những gì bạn muốn và nhấn RETđể lưu tệp vào tên mới này.

Bạn vẫn sẽ có tập tin gốc. Nếu bạn muốn quay lại với nó, chỉ cần truy cập lại với nó C-x C-f.


Tôi đã xem hướng dẫn sử dụng Emacs về Tệp / Lưu, nhưng không tìm thấy thủ thuật này. Làm thế nào bạn tìm ra? Tuyệt quá!
Keks Liều

4
Không chắc. Đó là một điều chung về nhắc nhở xe buýt nhỏ. Đánh Mp đi qua lịch sử và nhấn Mn cho bạn tùy chọn "hiện tại".
Malabarba

5
Nếu bạn đang sử dụng ido, làm C-fđầu tiên và sau đó M-n.
Kaushal Modi

1
Wow, tôi chưa bao giờ biết điều này. Cảm ơn! (Xin lỗi vì nhận xét "cảm ơn, tôi cũng vậy", nhưng đây là một ví dụ tuyệt vời về việc học một cái gì đó đơn giản nhưng hữu ích. Viva la emacs.stackexchange!
Mark Aufflick

3

Sao chép tên tệp trong bộ đệm hiện tại

Đây là một chức năng tôi sử dụng từ blog của Cameron Desautels sao chép tên tệp bộ đệm hiện tại và hiển thị nó trong xe buýt nhỏ.

 
;; Nguồn: http://camdez.com/blog/2013/11/14/emacs-show-buffer-file-name/
(defun show-copy-buffer-file-name ()
  "Hiển thị đường dẫn đầy đủ đến tệp hiện tại trong xe buýt nhỏ và cũng sao chép nó vào vòng diệt."
  (tương tác)
  (hãy ((tên tệp (tên tệp đệm)))
    (nếu tên tệp
        (tiên lượng
          (tên tập tin tin nhắn)
          (tên tập tin mới)
      (lỗi "Bộ đệm không truy cập tệp")))))

Đổi tên tên tệp trong bộ đệm hiện tại

Magnar Sveen đã triển khai chức năng dưới đây trong một trong những blog của mình , thuận tiện đổi tên bộ đệm hiện tại trong một lần. Đây không phải là những gì bạn yêu cầu nhưng tôi nghĩ nó có thể liên quan đến trường hợp sử dụng của bạn.

;; Nguồn: http://www.whattheemacsd.com/
(defun đổi tên-current-buffer-file ()
  "Đổi tên bộ đệm hiện tại và tập tin nó đang truy cập."
  (tương tác)
  (hãy ((tên (tên đệm))
        (tên tệp (tên tệp đệm)))
    (if (không (và tên tệp (tên tệp tồn tại tệp p)))
        (lỗi "Tên bộ đệm '% s' không truy cập tệp!" tên)
      (let ((tên mới (tên tệp đọc "Tên mới:" tên tệp)))
        (nếu (tên đệm get-đệm)
            (lỗi "Bộ đệm có tên '% s' đã tồn tại!" tên mới)
          (đổi tên tập tin tên mới 1)
          (đổi tên bộ đệm-tên mới)
          (set-visit-file-name new name)
          (set-buffer-mod-p nil)
          (thông báo "Tệp '% s' được đổi tên thành '% s'."
                   tên (tên tệp-nondirectory tên mới)))))))

Giải pháp của Magnar Sveen xóa tệp gốc và sau đó sẽ chỉ có tệp được đổi tên. Điều này là hữu ích, nhưng tôi cần giữ tập tin cũ cũng như tập tin được đổi tên. Hàm của Cameron Desautel sao chép tên tệp với toàn bộ đường dẫn. Điều này khá gần với giải pháp tôi cần. Bạn có biết làm thế nào để thay đổi chức năng này, để nó chỉ tràn ra tên tệp mà không có đường dẫn? Tuy nhiên, cảm ơn bạn rất nhiều.
Keks Liều

1
@KeksDose chỉ cần thay đổi (buffer-file-name)để (file-name-nondirectory (buffer-file-name))trong chức năng đầu tiên để có được sans filename thư mục.
nispio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.