2013-04-06 1 views
1

디버깅하는 동안, 나는 보통 실행하는 동안 화면에 변수를 출력하기 위해 많은 추적을 작성합니다. Emacs가 나를 위해 템플릿을 작성할 수 있다면 좋을 것입니다. 나는 이맥스에서 어떻게 프로그래밍해야할지 모르겠다. 나는 당신의 도움을 구하고있다. :)이맥스에서 추적 템플릿을 생성하십시오.

나의 생각은 다음과 같다. M-x trace-template과 같은 것으로, 변수의 이름을 물어볼 것입니다. 그런 다음이 같은 활성 버퍼에 추가됩니다 날짜는 필요하지 그 날의 흔적에 대한 빠른 검색을 수행하는 그들을 제거 할 수 있습니다 주석 추가

// trace20130604 
cout << "test.cpp variable: " << variable << endl; 

. "test.cpp"는 자동으로 삽입되는 활성 버퍼입니다. 그리고 "variable"은 Emacs 명령이 실행될 때 묻는 변수의 이름입니다.

이 방법이 유용 할 것으로 생각하십니까? 쉽게 구현할 수 있습니까? 어쩌면 이미 구현 되었습니까? :)

이상적으로는 모드에 따라 달라 지므로 사용하는 언어에 따라 올바른 템플릿을 삽입 할 수 있습니다.

도움을 주셔서 감사합니다.

감사합니다. 몇 가지 주요-모드

에 대한

솔루션 나는 두 가지 주요-모드에 대해 다루 프란체스코의 솔루션을 확장했습니다. Elisp에서 무언가를하려고 시도한 것은 이번이 처음인데, 코드가 추악하지만 그것이 효과가있는 것처럼 보입니다. 삽입 (잠재적 매개 변수) 템플릿을 현재의 버퍼로 :

(defun trace-template (variable-name) 
    (interactive "sVariable Name: ") 
    (if (string-equal (format "%s" major-mode) "c++-mode") 
     (progn 
      (insert (format-time-string "// trace%Y%m%d\n")) 
      (insert (format "cout << \"%s %s:\" << %s << endl;\n\n" 
        (file-name-nondirectory buffer-file-name) 
        variable-name variable-name))) 
    ) 
    (if (string-equal (format "%s" major-mode) "fortran-mode") 
     (progn 
      (insert (format-time-string "! trace%Y%m%d\n")) 
      (insert (format "WRITE(*,*) \"%s %s:\", %s\n\n" 
        (file-name-nondirectory buffer-file-name) 
        variable-name variable-name))) 
    ) 
) 

답변

0

첫 번째 솔루션은 단지 당신이 필요로하는 일에 목표로 yasnippet 확장을 사용하여 구성합니다.

Yasnippet은 예를 들어 MELPA 저장소를 통해 emacs의 패키징 시스템을 사용하여 쉽게 설치할 수 있으며 documentationhow to write custom snippets을 설명합니다. 템플릿을 다음과 스 니펫은 다음과 같이 수 : 내가 생각하는 당신은 쉽게 같은 방식으로 이름이 여러 언어 별 조각을 모두 정의 할 수 있도록

#contributor : me <[email protected]> 
#name : trace 
# -- 
// `(format-time-string "%Y%m%d")` 
cout << "`(file-name-nondirectory buffer-file-name)` $1:" << $1 << endl; 

Yasnippet는, 특정 모드에 조각의 확장을 제한 할 수 있습니다.


또 다른 솔루션은 다음과 같은 사용자 정의 이맥스 LISP 함수를 작성하는 것입니다 :

(defun trace-template (variable-name) 
    (interactive "sVariable Name: ") 
    (insert (format-time-string "// trace%Y%m%d\n")) 
    (insert (format "cout << \"%s %s:\" << %s << endl" 
        (file-name-nondirectory buffer-file-name) 
        variable-name variable-name))) 
+0

안녕 프란체스코을, 답변 주셔서 대단히 감사합니다! .emacs를 여러 컴퓨터로 옮겨서 하나의 파일 만 옮겨야하기 때문에 두 번째 기능을 좋아합니다. 메이저 모드에 따라 다른 템플릿을 인쇄하기 위해 몇 가지 if를 추가했습니다. 그것은 나에게 약간의 시간이 걸렸다. 그러나 나는 내가 그것을했다라고 생각한다 :) – siritinga

관련 문제