TextMate는 Mac OS X에서 코드에디터로써 아주 대명사처럼 쓰여지고 있다. 그만큼 기능이 좋다는 이야기겠지만 써 보질 않았으니 당췌 뭔지... -_- 하여간 textmate-mode는 뭔가 기능이 많아 보이지만, 일단 Emacs에서 괄호 등을 입력했을 때 자동으로 페어(닫히는 괄호 등)를 입력해 주는 기능을 제공해 준다. 물론 비슷하게 autopair 모드가 있는데 내 Emacs 에서 로딩 시 에러가 발생하는 바람에 포기한 비운의 모드다.
만약 바람 한글 입력기를 사용 중일 때 MacVim에서 한글 입력이 이상할 수도 있다. 버전에 따라 틀리겠지만 자모가 흩어지거나 이상 입력되는 현상이 발생할 수도 있다. 내 경우 ㅆㅣㅂㅏㄹ (죄송합니다. 욕입니다. 하지만 이게 가장 좋은 예라서요... ㅠㅠ 일단은 그냥 쓰기 그래서 풀어서 씁니다만 실제로는 붙여서 적어야 해요...) 을 입력해보면 '씨' 라는 글자가 '씨ㅅ' 이런 식으로 써지는 등의 문제가 있었다.
Vim에서 편집 중이던 파일을 다른 에디터 등으로 수정했을 때, 다시 Vim으로 돌아가보면 그 파일이 변경되었다면서 다시 읽을 것인가를 물어온다. 하지만 Emacs의 경우 기본적으로 물어보는 절차라던가 자동으로 다시 읽어들인다던가 하지는 않는다. 그래서 낭패를 본 경우가 제법 있다.
Emacs에서 윈도우 생성/닫기/크기조절/포커스 이동에 대한 커맨드와 관련 정보를 소개한다. 아래는 기본적으로 제공되는 단축키 및 기능 중 자주 쓸 만한 것 들이다. C-x 1 : 다른 창 모두 닫기 (즉 현재창을 최대화) C-x 2 : 현재창을 세로로 나누기 C-x 3 : 현재창을 가로로 나누기 C-x o : 다른 창으로 이동(other-window) 정보표시줄 좌클릭 후 드래그: 해당 창의 세로 크기 조절 정보표시줄 우클릭: 해당 창을 닫는다.
Vi/Vim의 강력한 기능 중 하나가 . 으로 '마지막으로 입력했던 내용 그대로 붙여넣기'가 있다. 뭔가를 입력한 다음에 ESC 를 누르고 원하는 위치로 이동해서 . 을 누르면 방금 전에 입력했던 내용이 그대로 달라붙는다. 즉 반복적으로 동일한 커맨드를 입력할 때 굉장히 편한 기능이다. Emacs의 경우도 물론 비슷한(-_-) 기능이 있지만 결코 편하지는 않다. 그래서 이와 비슷한 기능을 구현한 것이 바로 dot-mode 이다. (공식적으로 언급하고 있지만, dot 이라는 이름은 결국 vi의 . 을 의미하는 것으로 보면 된다)
이전 anything-for-files를 C-x C-f 에 바인드 시켜서 파일을 열 때 사용할 수 있는 예제 를 적었던 적이 있다. 그런데 이 방법으로 파일을 열 때 간혹 에러가 표시되는 문제가 있다. (미리 언급하는데 이 글은 이 문제를 해결한 기록이 아님을 밝힌다.)
Mac OS X 용 Emacs로 Aquamacs 가 유명하다. 과거에 Carbon 기반 GNU Emacs가 포팅되어 있을 때 Aquamacs가 Cocoa로 나오면서 유명해진 듯 하다. 하지만 개인적으로 좀 찝찝한게 있는데 GNU Emacs의 설정이 안먹거나 특별한 기능들이 일부 포함되어 있다는 점이었다.
변수나 클래스, 메소드나 함수 등의 이름을 지을 때 대소문자나 underscope(_)의 배치가 획일적이지 않다. 특히 단어와 단어 사이를 구분하기 위해 뭔가 특별한 방식을 사용한다. 이런 방식은 각각 명칭이 있긴 하지만 아마도 대체로 모르고 그냥 쓸 것 같다. 나도 몰랐기 때문에 이 기회에 알아낸 것들을 정리해 보고자 한다.
Vim에서 코딩 중 가끔 Emacs에서 코드 정리하는 기능이 부러울 때가 있다. 코드를 막 입력했지만 정렬이 안되어 있어서 보기 좋게 만들고 싶은데 이럴 때 물론 수동으로 노가다 처리하면 되긴 된다. 하지만 자동으로 해 준다면 더 없이 좋을 것이다. Emacs의 align 류 함수와 비슷하게 Vim에도 Align 이라는 플러그인이 있다.
간혹 Vim 에서 특정 영역을 주석처리(commenting)를 하거나 주석을 해제하고 싶은 경우가 있을 것이다. 개발자라면 자주 쓸 수 밖에 없다. Emacs에서 comment-region 과 uncomment-region은 사랑받는 함수이니까... Vim의 경우는 외부 플러그인의 도움을 받는 편이 편한 것 같다. 이번에 소개할 플러그인은 The NERD Commenter 이다.
Vim에서 한글을 입력하다 ESC를 눌러서 편집모드를 빠져 나와서 다른 커맨드를 입력하려 할 때 동작 안하는 경우가 있다. 한글 상태라서 키 입력을 제대로 못 알아먹는 상태인데 수동으로 영문으로 바꿔주면 되긴 된다. 이런 불편함으로 인해 영어만을 사용하는 나라가 아닌 것에 비운을 느껴야 할 것인가!
simplenote 에 관해서는 좀 글을 썼었지만, evernote 는 3rd Party에 대한 지원이 별로 없는 것 같아서 오래전에 버린 메모 서비스다. 리눅스용 클라이언트도 지원이 안되었다. 하지만 emacs에서도 이 에버노트 를 사용할 수 있는 확장이 개발된 것으로 봐서 API를 제공하는 서비스 였다는 것을 알 수 있게 되었다.
Unix나 Linux, 혹은 Mac OS X 사용자라면 루트(root) 사용자 권한으로 특정 파일을 편집해야 할 일이 있다. 이 경우 터미널에서 sudo 명령을 조합해 vim 등을 띄워서 편집하는 등의 방법이 많이 쓰이고 있다. (구형 Unix 라면 su 명령으로 유저 권한을 바꾸거나 root쉘로 바꾸는 경우도 있겠지만) 하지만 Emacs의 경우, emacs 자체를 루트 권한으로 띄우지 않는 한은 사용자에게 권한(permission)이 주어지지 않은 파일을 편집할 수가 없는 것 같다.
UINavigationController는 아이폰의 일반적인 네비게이션 UI를 쉽게 만들 수 있도록 해 준다. 물론 애니메이션도 필요하면 사용할 수 있다. 하지만 pushViewController:animated 혹은 popViewControllerAnimated:animated 를 사용할 때 애니메이션을 사용할지 여부만 고를 수 있지 애니메이션 종류를 고를 수는 없다. 무조건 좌/우로 플립되는 애니메이션만 사용할 수 있다. 그렇다고 해서 못 바꾸는 건 아니다. 약간의 노가다가 추가되면 원하는 에니메이션을 이용할 수 있다.
윈도우/맥/리눅스를 몽땅 쓰다 보니 Dropbox가 유일한 동기화 클라우드 웹하드 솔루션이긴 하지만, 그래도 Dropbox는 굉장히 훌륭합니다. 국내 서비스에 비해 속도가 좀 느리다는 단점이 있지만, 특정 디렉토리/폴더를 기준으로 완벽하게 원하는 컴퓨터와 동기화를 맞추는데 굉장히 안정적인 느낌입니다. 더구나 데몬이 알아서 동기화를 하기 때문에 별도로 동기화 서비스를 관리할 필요도 없습니다.
카카오톡 트래픽 때문에 말이 많다. 트래픽 때문에 3G망에 과부화가 걸린다는 통신사측 주장. 특히 SKT가 심하게 딴지를 걸고 있는 상황이다. 사용자 입장에서는 통신사에 돈을 지불하고 통신망을 사용하는데 과부화 때문에 카카오톡에 딴지를 걸고있는 통신사측을 곱게 볼 수가 없다. 엔지니어 입장에서 기술적(?)으로 이 사태(?)에 대한 판단을 한번 휘갈겨본다.
싱글톤 패턴은 전역변수를 직접 제어하는 형식의 문제점(?)을 보완하기 위해 정말 자주 쓰이는 패턴이다. 보통은 팩토리 패턴(factorypattern)과 결함하여 싱글톤 객체를 넘겨주는 팩토리 메소드를 호출해서 싱글톤 객체를 얻고 이 싱글톤 객체를 엑세스 해서 전역변수를 이용하는 것과 비슷한 효과를 얻을 수 있다.
각 문자와 이를 ASCII Code로 서로 바꾸는 건 C에서는 크게 신경쓸 일이 아니었다. 하지만 Python에서 문자는 문자열과 동일하게 취급되며 그 자체의 값을 읽어서는 ASCII 코드가 나오지 않을 수도 있다. (물론 요즘 이런걸 Python으로 쓸 일은 별로 없겠지만 -_-)
w3m은 텍스트 웹브라우저의 최고봉(?)이라고 개인적으로 일컷는데 lynx에 비해서 화려하기 때문이다. -_-;;; 어쨌든 Emacs 내에서 브라우징을 할 때 가장 자주 사용하는게 바로 이 w3m 연동 기능일 듯 하다. (w3라 불리우는 순수 Elisp으로 제작된 브라우저도 있지만 좀 느린 듯 하다.)
Emacs의 대표적인 모드 중 하나인 org-mode는 할일(TODO)이나 일정관리 및 메모 등 여러 용도로 사용되는 기능이다. 특히 TODO 관리와 다양한 파일에 나눠진 TODO를 모아서 알려주는 org-agenda 등의 기능도 제공되고 있다. VimOrganizer는 이 org-mode 기능을 Vim 용으로 만든 확장이다.