화면 밖에서 스코프의 시작을 표시


12

이 화면에서 벗어날 때 스코프의 시작 부분을 표시하고 싶습니다.

예:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

이것은 많은 프로그래밍 언어에서 작동 할 수 있지만 주로 C ++을 생각하고 있습니다.

VS를 아는 사람들과 좀 더 명확히하기 위해 Visual Studio에 존재하는 것과 비슷한 기능을 원합니다. 즉, 커서를 스코프의 끝에 배치하면 스코프의 시작 부분이 편집 버퍼의 맨 위에 표시됩니다.

이 기능은 이미 어딘가에 있습니까?


궁금합니다. 답변이 도움이 되었습니까?
Tu Do

@TuDo 예! 나는 방금 살펴볼 시간이 있었다. 나는 이미 의미론을 가지고 있었고 글로벌 시맨틱 stickyfunc 모드를 켜는 것이 잘 작동했습니다. 감사. 내 문제는 이제 색상으로 인해 헤더를 읽을 수 없다는 것입니다.
log0

답변:


14

C / C ++ / Java / Emacs Lisp / Python을 작성하는 경우 semantic-sticky-func-mode 가 원하는 작업을 수행합니다.

참고 : 이것은 현재 Emacs 24.4에있는 CEDET가 아닌 Git의 CEDET과 함께 작동하는 것 같습니다. 힘내에서 이맥스를 얻으려면 :

자식 클론 http://git.code.sf.net/p/cedet/git cedet

그리고 init 파일의 다른 모든 것보다 먼저 CEDET을로드하십시오.

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

활성화되면이 모드는 현재 기능 버퍼가 현재 버퍼의 첫 번째 라인에 있음을 나타냅니다. 이 기능은 화면보다 더 긴 기능을 가진 매우 긴 기능이 있고 기능 이름을 읽기 위해 위로 스크롤하지 않아도 원래 위치로 스크롤 할 때 유용합니다.

그것은 표시 전체 기능 인터페이스 (리턴 타입, 함수 이름 및 매개 변수)뿐만 아니라 함수 이름을.

활성화하려면 다음 코드를 init 파일에 넣으십시오.

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

업데이트 : 전류의 문제 중 하나는 semantic-stickyfunc-mode여러 줄에 흩어져있는 모든 매개 변수를 표시하지 않는다는 것입니다. 이 문제를 해결하기 위해 stickyfunc-enhance 패키지를 만들었습니다 .

데모 :

C의 데모는 다음과 같습니다.

시맨틱-스티키-펑크 모드 -c

다음은 Emacs Lisp의 데모입니다.

시맨틱 스티커 펑크 모드 제거

업데이트 : 또는 helm-semantic-or-imenu를 사용할 수 있습니다 . 함수 안에 있고 명령을 실행하면 커서가 목록의 함수에 바로 배치되므로 항상 전체 함수 인터페이스를 볼 수 있습니다. 데모:

  • 먼저 helm-semantic-or-imenu함수 helm-define-key-with-subkeys로 이동하고 포인트를 이동합니다.

  • 그런 다음 helm-semantic-or-imenu다시 시작 하여 helm-define-key-with-subkeys미리 선택됩니다.

  • 그런 다음 점을 변수 helm-map으로 이동하고 helm-semantic-or-imenuhelm-next-source 및 helm-previous-source라는 두 가지 기능에서 다시 실행 합니다. 이번에는 현재 작동중인 현재 의미 체계 태그 (helm-map)를 표시하는 대신 Helm Semantic 버퍼의 다른 두 태그를 보여줍니다. 명령을 실행하기 전에 접두사 인수를 제공했기 때문입니다.

또한이 데모는 Emacs Lisp에 있으며 C / C ++에서도 작동하며 함수 인터페이스가 길면 더 유연합니다.

지배적 의미 또는 메뉴


이것을 Lisp (특히 Elisp)에서 어떻게 작동 시켰습니까? 코드를 평가 emacs -Q했지만 예를 들어 탐색 할 때 설명 한 동작을 얻지 못했습니다 org.el.
itsjeyd

나는 대답을 업데이트했다. bzr의 Semantic으로 시도해야합니다.
Tu Do

1
완전히 벗어난 주제. Nyan 모드를 소개해 주셔서 감사합니다. 내 코딩은 다시는 동일하지 않습니다.
purple_arrows

6

당신은 켤 수 있습니다 which-function-mode수행하여

M-x which-function-mode RET

설정을 영구적으로 만들려면

(which-function-mode 1)

init 파일에.

설명서에서 :

현재 기능 (Which Function 모드)의 모드 라인 표시를 토글합니다. [...]

어떤 기능 모드가 전역 부 모드입니다. 활성화되면 현재 기능 이름이 특정 주요 모드 의 모드 라인에 계속 표시됩니다 .

참고 : 이름에서 실제로 제안하는 것은 아니지만 "기능"뿐만 아니라 다른 유형의 범위에서도 작동합니다. 예를 들어,에 org-mode, which-function-mode디스플레이는 현재 하위 트리의 제목.


감사! 모드 라인에 표시되는 기능 이름이 마음에 듭니다. 일부 사례는 잘 작동하지 않았습니다. 네임 스페이스의 구조체에있는 메소드와 마찬가지로 네임 스페이스 이름 만 표시되었습니다.
log0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.