본문 바로가기

Editor/Emacs

이맥스에서 vi로 열기

지금까지 그 촌시러운 화면이 싫어 "그냥 빈 페이지"를 출력하게 바꿨었는데

생각해보니 emacs를 열자마자 제일 먼저 해야 할 일은 "파일 열기" 아닌가?

적어도 shell을 열면 좋을 것 같아서 시작 페이지를 shell로 바꾸기로 했다.

  1. (setq inhibit-splash-screen t)  
  2. (shell)  


그러면 shell을 열면서 시작하긴 하는데... 이거 shell로 뭘 쓸건지 물어보는 화면이 나온다. 깔끔하지 않군!

더군다나 파일을 열 때는 어떻게 하란 말인가!!

  1. (setq inhibit-splash-screen t)  
  2. (eshell)  


eshell이라는 좋은 셸이 있었다. emacs lisp로 만들어진 shell인 것 같은데 윈도우에서도 잘 돌아간다고 하니 이렇게 반가울 수가 없다.



다만 파일을 열 때 귀찮은 점이 find-file 파일명 이라고 입력해야 한다는 것이다.

파일 하나 열기 위해 공백 포함 10글자를 더 입력해야 하는 것이다.

  1. (setq inhibit-splash-screen t)  
  2. (eshell)  
  3.   
  4. (defun eshell/e (args)  
  5.   (find-file args))  


이렇게 해주면 그냥 간단히 "e 파일명" 이라고만 입력해도 파일을 열 수 있다.

마지막으로 한 가지 덧붙이자면 외부에서 편집할 파일을 직접 클릭해서 emacs를 실행한 경우에, 즉

emacs를 실행시키면 바로 그 파일이 나와야 하는 경우에도 저 eshell이 뜨게 되는 문제가 생긴다!

  1. (setq inhibit-splash-screen t)  
  2. (when (= (length command-line-args) 1)  
  3.   (eshell))  
  4.   
  5. (defun eshell/e (args)  
  6.   (find-file args))  


이렇게 하면 해결된다.


참고로 KaiGrossjohann 님의 방법은 좀더 우아하다.

  1. (defun eshell/vi (&rest args)  
  2.   "Invoke `find-file' on the file.  
  3. \"vi +42 foo\" also goes to line 42 in the buffer."  
  4.   (while args  
  5.     (if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))  
  6.         (let* ((line (string-to-number (match-string 1 (pop args))))  
  7.                (file (pop args)))  
  8.           (find-file file)  
  9.           (goto-line line))  
  10.       (find-file (pop args)))))  


이 방법은 "vi 파일명1 파일명2 ..." 이렇게 입력하면 여러 개의 파일을 동시에 열 뿐더러

파일명 앞에 "+행번호" 를 붙이면 파일을 열고 그 행번호의 위치로 이동해준다.


참고사이트>
http://blog.whitesky.net/34
 

http://www.emacswiki.org/cgi-bin/wiki?EshellFunctions