3

フォルダー内の複数のファイルの空白とタブを単純にクリーンアップするスクリプトを作成したいと思います。とりわけ、bashファイルを作成しました:

emacsclient -t -e '(progn (prelude-cleanup-buffer-or-region) (save-buffer-kill-terminal))' $FILE

すべてのファイル引数を実行する関数として解釈するため、これは機能していないようです(したがって、 $FILE は関数として実行されます)。(PS prelude-cleanup-buffer-or-region はこちらから)

今、私が本当に欲しいもの--batch はここで説明されているように見えますが(実際には画面に何も表示したくないので)、これは emacsclient のオプションの 1 つではありません。単に使用するのではなく、emacsclient を使用したい理由はemacs --batch、起動ファイルがたくさんあるので、すべてをロードしたままにしておきたいからです。そうしないと、スクリプトに時間がかかりすぎてしまいます。

これについてのアドバイスはありますか?

前もって感謝します。

4

1 に答える 1

2

emacsclient -e は Lisp フォームを評価し、ファイルを編集しないことを意味します

マニュアルページから

 -e, --eval
              do  not  visit files but instead evaluate the arguments as Emacs
              Lisp expressions.

(find-file "file")実行するフォームのリストにa を追加できると思います

私はちょうどこのスニペットを試しました -

/opt/local/bin/emacsclient  -e '(progn (find-file "./tmpfoo") 
    (end-of-buffer) (insert "ffff") (save-buffer))' 

そして、期待どおりにファイルを静かに編集します。

シェルのグロビングとスクリプトを使用して、引数ファイル名をフォームのリストに展開できます。

-tスイッチでも実行しないでください。-e は永続的なエディター ウィンドウを持つことを想定しておらず、kill ターミナルは必要ありませんクライアントは elisp を実行して終了します。

おそらく、ファイル名の引数を取る Lisp 関数を作成し、起動時に emacs にロードし、それを emacsclient を介してファイル名で呼び出すだけだと思います。

例えばFILENAME="somefile"; emacsclient -e "(now-do-my-thing $FILENAME)"

于 2014-10-27T12:54:51.843 に答える