Используя текущее имя файла буфера в компиляции M-x - программирование
Подтвердить что ты не робот

Используя текущее имя файла буфера в компиляции M-x

Я хотел бы emacs использовать текущее имя файла буфера как часть команды, переданной в M-x compile. Например, если я редактирую ~/foo.rb, я хотел бы M-x compile выполнить ruby ~/foo.rb

Я попытался установить compilation-command на (list "ruby" buffer-file-name), но, видимо, вы не можете передать s-expression здесь.

4b9b3361

Ответ 1

1. Прочтите документацию по функции

C-h f compile RET

compile is an interactive autoloaded compiled Lisp function in
`compile.el'.
[snip]
Interactively, prompts for the command if `compilation-read-command' is
non-nil; otherwise uses `compile-command'.  With prefix arg, always prompts.
Additionally, with universal prefix arg, compilation buffer will be in
comint mode, i.e. interactive.

Теперь, когда мы нашли то, что искали, пусть...

2.... читать документацию переменной...

C-h v compile-command RET

compile-command is a variable defined in `compile.el'.
Its value is "make -k "
[snip]
Sometimes it is useful for files to supply local values for this variable.
You might also use mode hooks to specify it in certain modes, like this:

    (add-hook 'c-mode-hook
       (lambda ()
     (unless (or (file-exists-p "makefile")
             (file-exists-p "Makefile"))
       (set (make-local-variable 'compile-command)
        (concat "make -k "
            (file-name-sans-extension buffer-file-name))))))

3.... и, наконец, адаптировать пример к вашим потребностям

(add-hook 'ruby-mode-hook
          (lambda ()
            (set (make-local-variable 'compile-command)
                 (concat "ruby " buffer-file-name))))

Конечно, вы можете легко настроить его для использования rake, если есть Rakefile.