컴파일 모드 현재 디렉토리를 자동으로 변경 하시겠습니까?


16

현재 내 컴파일 명령은 다음과 같습니다.

cd ~/somedir && ./somescript.sh

이것은 emacs가 오류가 발생한 파일을 찾아서 열지 못하게합니다.

물론 M-x cd수동으로 실행할 수 는 있지만 현재 디렉토리를 프로그래밍 방식으로 변경하도록 버퍼에 지시하는 방법이 있습니까?


1
이것도 내가 시도한 것입니다. 이상적으로는 기본 디렉토리의 .dir-locals.el에 넣을 수있는 것이있을 것입니다 (기본 디렉토리를 설정하는 해킹으로 인해 원하지 않는 부작용이 발생하고 컴파일 모드에서만 설정하는 것은 작동하지 않는 것 같습니다).
Julian Squires

답변:


7

마지막으로 현재 디렉토리에 너무 의존적이어서 결말에 영향을 미치는 ido와 같은 다른 것들에 의존하지 않았습니다.

대신에 빌드 디렉토리를 추가하여 compilation-search-path

(add-to-list 'compilation-search-path "/path/to/build")

이 질문에서 발견 : Emacs의 컴파일 오류가 컴파일 버퍼에서 얻는 경로를 조정하는 방법은 무엇입니까?

또한 특정 문자열이 나오는 경우 디렉토리 매 처가 디렉토리를 자동으로 변경할 수 있다고 설명합니다.

Entering directory `...'
... 
Leaving directory `...'

이것은 분명히 사용자 정의 할 수 있습니다.


이것은 강력한 솔루션처럼 보입니다. 그것이 당신을 위해 일하는 경우, 그것을 받아 들여 주시기 바랍니다.
Malabarba 2016 년

빌드 시스템이에서 일부 파일을 찾으면이 기능이 작동하지 않을 수 있습니다 /path/to/build.
Andre Holzner '

5

컴파일 명령을 호출하려는 디렉토리의 Dired 버퍼를 작성하여 앵커 역할을 할 수 있습니다. 컴파일하려면 Dired 버퍼로 전환하고 컴파일 명령을 실행하십시오. compileDired 버퍼의이 디렉토리에서 명령을 실행합니다. 이것의 장점은 M-x cd컴파일 할 때 디렉토리를 탐색하거나 탐색 할 필요가 없다는 것 입니다.

을 사용하는 경우 projectile,이 projectile-compile프로젝트에 의해 인식 된 프로젝트 루트에서 자동으로 컴파일 명령을 실행 하는 명령 이 projectile있습니다.


4

이 대체 명령은 트릭을 수행해야합니다.

(defun compile-in-dir (dir command)
  (interactive "DCompile in directory: \nsCommand: ")
  (let ((default-directory dir))
    (compile command)))

또는 일반 compile명령을 사용하여 컴파일을 실행 한 후 버퍼 (setq default-directory "~/somedir")에서 평가할 수 있습니다 *compilation*. 그러면 오류 탐색이 작동하지만 recompile친구가 올바른 작업을 수행 하지 못하게 될 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.