簡體   English   中英

如何使用elisp處理一系列文件?

[英]How to process a series of files with elisp?

我是編程的新手,所以請在這里忍受我...

我有一個名為“foo01.txt”,“foo02.txt”等文件的目錄和一個名為MyFunction的函數。 我想打開每個文件作為緩沖區,在其上運行MyFunction ,將緩沖區寫入其文件,終止緩沖區並繼續執行系列中的下一個文件,直到完成所有文件。

我認為我需要做的所有部分都在Cookbook( http://emacswiki.org/emacs/ElispCookbook )中進行了描述,但我並不是真正理解如何將它們放在一起。 謝謝!

回答

如果您正在尋找純elisp的答案,您可以這樣做:

(defun process-file (f)
  (save-excursion 
    (find-file f)
    (my-function)     ; Call your function here.
    (write-file f)
    (kill-buffer (current-buffer))))

(defun process-files (dir) 
  (mapc 'process-file
        (directory-files dir t ".txt$")))

process-files將遍歷給定目錄中的每個文件,並將process-file應用於所有.txt文件。 你可以像這樣調用它:

(process-files "~/target-directory")

您可以將其復制到* scratch *緩沖區中並使用各個部分。 最有趣的功能是:

  • mapc - 將函數應用於列表中的每個項目
  • directory-files - 獲取directory-files所有文件和文件夾,在這種情況下檢索所有.txt文件
  • find-file - 在緩沖區中打開一個文件(這是鍵入Cx Cf時運行的文件)

學習Lisp

如果您正在學習Lisp,我可以推薦Practical Common Lisp 你將能夠使用Elisp完成這本書的驚人數量。 否則,下載像SBCL這樣的Common Lisp環境。

Emacs的好處在於,由於Emacs的開放性,通常有很多方法可以解決給定的問題。

例如,您可以在Emacs中學習一個簡單的技巧,它將幫助您現在和將來:

這是一個可怕的列表,例如來自Cx f /home/me/mydir/

  /home/me/mydir:
  total used in directory 32 available 5575136
  drwxr-xr-x  10 me  brainers   340 Jan 18 15:50 .
  drwxr-xr-x  78 me  brainers  2652 Feb  2 18:08 ..
  -rw-r--r--   4 me  brainers   136 Apr  1  2012 a.txt
  -rw-r--r--  16 me  brainers   544 Feb  1 09:56 b.txt
  -rw-r--r--   6 me  brainers   204 Apr  6  2012 c.txt

轉到第一個(使用向上向下鍵),即a.txt ,然后執行

  • Cx(開始宏錄制
  • f打開該文件
  • Mx myfunction運行myfunction功能
  • Cx Cs保存文件
  • Cx k關閉該文件,返回到dired
  • 向下鍵轉到下一個文件(在這種情況下是b.txt
  • Cx)結束宏

然后對於每個文件(來自b.txt ),做

  • Cx e執行宏,它將對b.txt執行相同b.txt ,然后指向c.txt (如果你在兩個宏執行之間沒有做任何事情,你可以做e重新執行宏)

注意不要在不想處理的內容上運行宏。

筆記:

  • 如果你在宏的創建過程中犯了任何錯誤,Emacs將中斷錄制過程(因此, Cx)會抱怨沒有錄制宏)。 在這種情況下,宏必須從Cx(
  • C鍵Control鍵M鍵Meta鍵,通常是Alt鍵 並且Cx k表示控制x然后是k鍵

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM