선택한 프로젝트를 고정하고 현재 버퍼를 따르지 않을 수 있습니까?
On 2월 14, 2021 by adminprojectile-switch-project를 호출 할 때 projectile 만 프로젝트를 전환하도록 할 수 있습니까? 버퍼를 따르지 않습니까?
emacs에서 버퍼를 전환하면 projectile이 현재 버퍼가 속한 프로젝트 (있는 경우)로 프로젝트를 전환합니다.
저는 보통 프로젝트에서 작업합니다. 그러나 다른 프로젝트에서도 파일을 열 수 있습니다. 내 작업 항목과 메모 (내 조직 프로젝트에 속함)가 열려있는 조직 파일과 스크립트 프로젝트의 일부 테스트 스크립트, 그리고 내가 작업중인 프로젝트의 소스가 있습니다.
이렇게하면 (helm) -projectile-find-file을 사용하여 파일을 여는 것은 일반적으로 해당 프로젝트에서 버퍼로 먼저 전환하거나 (helm) -projectile-switch-project를 수행해야하기 때문에 거의 의미가 없습니다. 그리고 나서 나는 (거의) helm-find-files를 사용할 수 있습니다.
항상 프로젝트 파일을 열기 위해 Cc pf를 수행 할 수 있지만 여전히 발사체 전역 모드를 활성화하고 싶습니다.
댓글
답변
일반적으로 발사체 명령은 projectile-project-root
를 호출하여 현재 프로젝트를 찾습니다. 현재 default-directory
를보고 작동합니다.
프로젝트 루트 함수에 조언하고 대신 고정 값을 반환하도록 할 수 있습니다.
(defvar projectile-main-project "~/projects/foo") (defun use-main-project (&rest args) "Skip calling `projectile-project-root" when there is a main project defined." (when projectile-main-project projectile-main-project)) (advice-add #"projectile-project-root :before-until #"use-main-project)
이 구현은 projectile-main-project
가 설정되고 반환됩니다. 주 프로젝트를 nil로 설정하면 “대신 기본 발사체 동작을 얻게됩니다.
여기에 주 프로젝트를 변경하는 명령이 있습니다. 위의 projectile-project-root
에 대해 조언했기 때문에 이는 발사체가 현재 버퍼에 대한 프로젝트를 파악할 수 있도록 주 프로젝트를 일시적으로 해제 한 다음 해당 결과를 사용합니다.
(defun set-main-project (&optional dir) "Set the projectile main project based on the current buffer. When called with argument DIR, make that main project instead." (interactive) (if dir (setq projectile-main-project dir) (let ((current-project)) (let ((projectile-main-project nil)) (setq current-project (projectile-project-root))) (setq projectile-main-project current-project))))
업데이트
다음을 사용중인 경우 advice-add
(Emacs 24.4보다 이전 버전)이없는 Emacs 버전은 대신 defadvice
를 사용하여 동일한 결과를 얻을 수 있습니다.
(defadvice projectile-project-root ( around use-main-project activate) "Use the current main project, if any." (if projectile-main-project (setq ad-return-value projectile-main-project) ad-do-it))
댓글
- 훌륭합니다! 아주 좋아요! 대단히 감사합니다. defadvice 또는 이와 유사한 것을 대신 사용할 수 있습니까? 저는 24.3에 ' m입니다. 그러나 다시 업그레이드하면 좋을 것입니다 =)
- 물론, defadvice를 대신 사용할 수 있습니다. 이 경우 ' 편리한
:before-until
옵션이 없으므로around
조언을받은 다음 기본 프로젝트 세트가없는 경우projectile-project-root
를 통해 명시 적으로 호출합니다. - 관련 사용 사례의 경우 비슷한 작업을 수행하는 것이 합리적입니다. 하지만
:after-until
조언을 사용합니다.projectile-project-root
는 프로젝트 외부에있을 때nil
를 반환하기 때문에. 따라서 조언을 사용하여 기본 프로젝트를 설정할 수 있습니다. 이 로직은 최종 기본 옵션으로 프로그래밍하는cond
와 비슷합니다.
projectile-find-file
를 실행할 때 다른 프로젝트에서도 항상 " main " 프로젝트, 맞습니까? 그렇다면 현재 ' 구현되지 않았지만 프로젝트를 " 기본 ".