파일

2009-08-13 3 views
4

의 중간 나는 기본적으로 오브젝티브 C로 파일을하는 .m 인식하지 못하는 OS X, 아래 Aquamacs의 사용자입니다에서 문자열에 대해 일치 이맥스 마법 모드-alist을 얻을 대신 MATLAB로 처리하는 방법 files - 메일 링리스트에서, 배포판에 솔루션을 추가하기 전에 Obj-C 파일을 다른 사람들과 구별 할 수있는 확실한 방법을 원한다는 것이 관리자가 느꼈던 이유입니다.파일

따라서 적절한 Objective-C 파일을 올바르게 식별하고 올바른 모드로 전환하는 데 도움이되는 적절한 마법 모드 알리미를 생각해 냈습니다. 일부 생각한 후에는 확인하지 않았던 것처럼 보였습니다 세 가지 키워드 중 하나의 존재입니다

@implementation 
@interface 
@protocol 

모든 Objectve-C 파일이 거기에 그 문자열 중 하나를해야하고, 그들은 또한 매우 높다 매트랩 파일에 있지 않을 것입니다.

내가 다음 @implementation을 인식하는 매직 모드 - alist 변형을 세우는 시도, 내 첫 번째 시도했다 :
(add-to-list 
'magic-mode-alist 
'(".*^\@implementation.*" . objc-mode)) 

는 기본적으로 - 라인의 시작 파일에 어디 @implementation 확인합니다. 의 Obj-C 모드로 전환하지 않았다, 그것에서 @implementation과 함께하는 .m 파일을 여는 - 내 이맥스에 이러는 후

는 효과가 없습니다 듯하지만 파일.

사람은 문제가 내 마법 모드 - alist 항목과가 무엇인지 알고 있나요? 내가 찾은 유일한 예제는 파일의 맨 처음 (nxml-mode의 경우)에 일치하는 텍스트이며, 파일의 중간에있는 문자열에는 일치하지 않습니다. 그것은 내 정규 표현식에 틀린 것이 틀림 없지만 같은 주제의 몇 가지 변종은 아무런 효과가없는 것으로 보입니다.

내 모드 .emacs 파일에서 자동 모드 알리스트가 올바른 모드를 가져와 작업하는 방법에 대한 조언이 필요하지 않아이 문제를 해결하고 싶습니다. "길.

편집 : 나는 "에 대한 대체"\ n을 "를 사용

(setq magic-mode-alist 
    (append (list 
     '("\\(.\\|\n\\)*\[email protected]" . objc-mode) 
     '("\\(.\\|\n\\)*\[email protected]" . objc-mode) 
     '("\\(.\\|\n\\)*\[email protected]" . objc-mode)) 
     magic-mode-alist)) 

참고 : 아래 허용 응답

덕분에, 여기 내 이맥스 파일이 마지막 코드^"(줄의 시작) 정규식에서 정확하게 타입을 결정하는 것이 중요합니다. 그렇지 않으면 .emacs 파일 자체가 @implementation이 거기에 있었기 때문에 obj-c 모드로 나타납니다.

내가 알고있는 사실은 마법을 연구하는 사람들이 작업 할 파일의 시작 부분에 특정 수의 문자 만 주어진다는 것입니다 (기본값은 4000 문자로 magic-mode-regexp-match-limit으로 정의 됨) 아마도 성능상의 이유로. 일반적으로 그 숫자는 @implementation 또는 @interface 블록의 시작 부분을 찾는 데 충분하지만 일부 사람들처럼 파일 헤더에 수정 주석을 삽입하는 경우 크게 증가시켜야 할 수도 있습니다. 백업과 마찬가지로 자동 matlab 일이 내 뒤에 있기 때문에 자동 모드 alist를 사용하여 .m 파일을 항상 obj 모드로 열도록하는 코드도 포함시킬 계획입니다.하지만이 마법 모드 변경은 Emacs 23 자체가 아니라면 적어도 Aquamacs의 공식 배포판 (정규식은 아마도 그렇게하기 위해 조금 더 강화되어야 할 것입니다).

이맥스 regular expressions에서

답변

5

, .는 줄 바꿈과 일치하지 않습니다.또한 ^ 문자는 첫 번째 문자가 정규 표현식에 없으면 특수 문자 (일치하는 행의 시작 문자)가 아닙니다 (자세한 내용은 매뉴얼 참조).

(add-to-list 
'magic-mode-alist 
'("\\(.\\|\n\\)*@implementation" . objc-mode)) 
:

그래서 당신은 같은 뭔가가 필요