Search Results for 'emacs'

2 POSTS

  1. 2008/02/22 구문 강조과 정규표현식
  2. 2008/02/13 Emacs: Color Theme, Python Mode

Emacs에는 Python Mode라는 것이 있습니다. 열혈강의 파이썬 개정판 ver2에서 예제를 쳐보던 중에 Emacs의 구문 강조 기능이 아래와 같이 이상하게 나오더군요. (뭐야.. 코드인데 왜 문자열로 인식하는거야 ㅠㅠ)

파이썬 문법은 맞지만, 제대로 인식하지 못하는 에디터

p = re.compile('''href=([^'"]\S+?)[\s>]|href="([^"]*?)"|href='([^']*?)\'''', re.I)

바로 요 한줄 때문에 바보가 되어버린 것입니다. 이게 뭐, 강조에만 문제가 생기면 그냥 무시하고 예제를 때렸겠습니다만, 아랫 부분들이 전부 문자열로 인식되버리니깐, Emacs의 TAB 기능이 마비되더군요. -_-; 스페이스바로 하나하나 indent를 맞출 수도 없는 노릇이고..

"아.. 이거 다른 에디터를 찾아봐야하나.."하고 고민하다가, 결국 위 코드를 요렇게 고쳤습니다. 작은 따옴표 3개로 감쌌던 문자열을, 큰 따옴표로 하고, 대신에 그 안에 있는 글자들에서 따옴표들에 역슬래쉬를 붙여준거죠.

p = re.compile("href=([^'\"]\S+?)[\s>]|href=\"([^\"]*?)\"|href='([^']*?)'", re.I)

요 지저분한 코드로 바꿨더니, 아래 그림처럼 잘~ 나오더군요.

에디터가 이해하기 쉽게 고쳐준 모습

Syntax Highlighting 기능은 대부분의 에디터에선 정규표현식으로 검사를 해요. 예를 들어, Editplus에서는 ^[a-z_].*\([^;]*$ 라는 정규식 패턴에 부합되는 부분을 함수 본체로 인식합니다. (그래서 자동 줄변환도 되죠!).

하지만, 언어들이 복잡해져감에 따라서 정규식으로는 모든 문법을 커버하는 것이 힘든가 봅니다.
이맥스 파이썬 모드.. 살짝 실망했어요. ㅠㅠ

-- Jong10

p.s. Windows Live Writer로 지금 이 글을 작성하고 있는데, 자꾸만 C-x C-s를 누르네요 -_-;


1원짜리 팁!

Emacs의 설정파일 .emacs에서 컬러테마를 적용할 때에는,

(setq load-path (cons (expand-file-name "C:/~생략~/.emacs.d/") load-path))
(load-library "color-theme")

(require 'color-theme)
(color-theme-initialize) ;; <-- 요걸 몰라서 삽질했네!!
(color-theme-charcoal-black) ;; 테마 이름

요러 코롬 합니다. 자세한 것은 EmacsWiki: Color Theme에 있어요.
참조했던 사이트에는 color-theme-initialize가 안나와있어서 한참 헤맸네요. ㅠㅠ
(Color Theme는 따로 받아서 깔아줘야 함.)

 

팁 하나 더,
Emacs에서 파이썬 모드 사용하는거..

파이썬모드 다운로드: http://sourceforge.net/projects/python-mode/

python-mode.el을 load-path에 추가하고,

(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))

아래의 훅!도 넣어주면 좋아요.

(add-hook 'python-mode-hook
           (lambda ()
             (set (make-variable-buffer-local 'beginning-of-defun-function)
                  'py-beginning-of-def-or-class)
             (setq outline-regexp "def\\|class ")))
역시 자세한 것은, EmacsWiki: Python Mode에 있어요.
 
-- Jong10