1

メニューで "Compile.." を選択すると、Emacs がコマンドラインで "make filename" を実行するように Emacs をセットアップしようとしています。私は次のようなことを試みています:

(setq compile-command (concat "make " (file-name-sans-extension
                                       buffer-file-name)))

しかし、それは機能しません - Emacs がバッファーのファイル名を探しているようですが*scratch*、それにはそれがありません。これを修正する方法を知っている人はいますか?

ありがとう。

更新: Cheeso によって提案されたように、フックは問題を修正します。ここに私のために働くバージョンがあります:

(defun cur-file ()
  (file-name-sans-extension
   (file-name-nondirectory (buffer-file-name (current-buffer)))))

(add-hook 'c++-mode-hook
          (lambda()
            (set (make-local-variable 'compile-command)
                 (concat "make " (cur-file)))))
4

1 に答える 1

4

はい-あなたのためのいくつかのオプション。

  • 単純ファイルローカル変数を定義します。ファイルのヘッダーコメントには、次のようなものを含めてください。

     // -*- compile-command: "gcc -Wall -O3 -o f file.c" -*-
    

    詳細については、 https ://stackoverflow.com/a/4540977/48082を参照してください。

  • より精巧な-マーマレードリポジトリでsmarter-compile.el利用可能と呼ばれるモジュールがあります。これにより、特定のバッファーに使用するを推測するためのいくつかのルールを定義できます。たとえば、makefileがある場合は、MAKEを使用します。それ以外の場合、ファイルが.cファイルの場合は、gccを使用します。等compile-command

    これは、すべてのファイルにコメントを挿入したくない場合、または作業しているさまざまな種類のファイルやプロジェクトが無数にある場合に便利です。

ps:シンプルsetqが機能しない理由は、編集中のバッファーでシンプルを評価していないためだと思います。おそらくあなたはそれをあなたの個人的なものに入れたいでしょうxxxx-mode-hook-fn、ここでxxxはあなたが編集しているファイルのモードです。

于 2012-04-10T03:23:06.987 に答える