4

私はプログラミングの初心者なので、ここで我慢してください...

「foo01.txt」、「foo02.txt」などのファイルでいっぱいのディレクトリと、。という関数がありMyFunctionます。各ファイルをバッファーとして開き、実行MyFunctionし、そのファイルにバッファーを書き込み、バッファーを強制終了し、すべてのファイルが完了するまで一連の次のファイルに移動します。

これを行うために必要なすべての部分はクックブック(http://emacswiki.org/emacs/ElispCookbook)に記述されていると思いますが、すべてをまとめる方法を本当に理解していません。ありがとう!

4

2 に答える 2

6

答え

純粋な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")

これを*スクラッチ*バッファにコピーして、個々のパーツを試してみることができます。最も興味深い関数は次のとおりです。

  • mapc-リスト内の各アイテムに関数を適用します
  • directory-files-ディレクトリ内のすべてのファイルとフォルダを取得します。この場合、すべての.txtファイルを取得します。
  • find-file-バッファ内のファイルを開きます(これは、入力時に実行されるものですC-x C-f

Lispの学習

Lispを独自に学習している場合は、PracticalCommonLispをお勧めします。Elispを使用して、驚くほどの量の本を読み進めることができます。それ以外の場合は、 SBCLなどのCommonLisp環境をダウンロードしてください。

于 2013-02-03T10:32:02.743 に答える
4

Emacsの良いところは、Emacsのオープン性のおかげで、特定の問題を解決する方法がたくさんあることです。

たとえば、Emacsで簡単なトリックを学ぶことができます。これは、現在および将来に役立ちます。

これは、例えばからのdiredリストですC-x 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

最初のもの(updownキーを使用)に移動します。つまりa.txt

  • C-x (マクロ記録を開始するには
  • fそのファイルを開くには
  • M-x myfunctionそのmyfunction関数を実行するには
  • C-x C-sファイルを保存するには
  • C-x kそのファイルを閉じるには、 diredに戻ります
  • down次のファイルに移動するためのキー(b.txtこの場合)
  • C-x )マクロを終了します

b.txt次に、(からの)ファイルごとに、

  • C-x eマクロを実行するには、と同じように実行し、b.txtをポイントしc.txtます。(e2つのマクロ実行の間に何もしなかった場合は、マクロを再実行するために行うことができます)

処理したくないものに対してマクロを実行しないように注意してください。

ノート:

  • マクロの作成中にミスをすると、Emacsは記録プロセスを中断します(したがって、C-x )マクロが記録されていないと文句を言います)。この場合、マクロはから再開する必要がありC-x (ます。
  • C-keyコントロールキーで、通常M-keyメタキーAlt-keyです。そして、コントロールx、次にkキーC-x kを意味します。
于 2013-02-03T07:53:06.697 に答える