첫 번째 간단한 Emacs 명령

11028 단어 emacs-lispEmacs
이것은 「 Emacs 실천 입문 출판 기념 이벤트 」로 발표하는 내용입니다 ヾ(〃><)노☆

너 누구야
  • 토끼, @tadsan , Zonu.EXE
  • 회사에서는 PHP라든지 PHP라든지 PHP를 쓰고 있다
  • 전에는 Ruby라든지 Python라든지 쓰고 있었습니다
  • Emacs-JP, Slack 등에 있습니다
  • WEB+DB PRESS로 PHP의 기사라든지 쓰고 있었습니다
  • 그 밖에서는 읽을 수없는 내용을 상당히 썼으므로 백 넘버 추천





  • Emacs에서


  • 20 개 정도 패키지를 공개하고있다
  • Qiita에게 가끔 뭔가 쓰고있다
  • MELPA에서 최신 패키지를 보았습니다.
  • 최근 PHP Mode의 메인터너를 계승했습니다


  • 패키지란 무엇


  • Emacs의 함수, 명령, 매크로 등을 요약 한 것.
  • 이전에는 Lisp 파일을 다운로드하여 수동으로 배치했습니다.


    명령은 어렵지 않습니다.


  • 거대한 패키지는 굉장합니다 (꽤)

  • @tadsan 그렇게 복잡하지는 않지만 기본 기능을 간단하게 결합한 경우가 많습니다
  • 간단한 명령은 의외로 간단하게 만들 수 있다!


  • 먼저 기억하는 것



    조금 떠나는 Lisp


    ; 는 행 코멘트
    ;; たしざん
    (+ 1 2 3) ;=> 6
    
    ;; かけざん
    (* 1 2 3) ;=> 6
    



    비교



    다른 언어의 truet , falsenil 입니다.
    (익숙해질 수밖에 없는 용어)
    (> 1 2)     ;=> nil
    (equal 1 2) ;=> nil
    (< 1 2)     ;=> t
    (equal 1 1) ;=> t
    

    비교 함수 여러가지 있지만 equal 에서 ok.

    임시 변수는 let*


    (let* ((name "ミク"))
      (message "こんにちは、%s" name))
    
    let 하지만 좋지만, 기본은 let* 를 사용해 두는 것이 혼란하지 않습니다.

    임시 변수는 let*


    (let* ((name "ミク")
           (hour (string-to-int (format-time-string "%H"))))
      (message "こんにちは、%s。今は%d時です。" name hour))
    

    물론 복수의 변수도 만들 수 있고, 식도 쓸 수 있습니다.

    setq로 변수 덮어쓰기


    (let* ((name "ミク")
           (hour (string-to-int (format-time-string "%H"))))
      (if (>= hour 12)
          (setq name "リン"))
      (message "こんにちは、%s。今は%d時です。" name hour))
    

    이 경우에는 이렇게 쓰는 것이 좋습니다.


    (let* ((hour (string-to-int (format-time-string "%H")))
           (name (if (>= hour 12)
                     "リン"
                   "ミク")))
      (message "こんにちは、%s。今は%d時です。" name hour)
    

    들여쓰기는 Emacs에 의존한다



    키보드의 TAB 버튼을 누르면 좋은 느낌으로 정렬해줍니다. No 자기유동 들여쓰기🙅🏻



    기억하면 좋은 함수



    format



    C 언어라든지 sprintf 같은 느낌으로 문자열을 포맷합니다.
    (format "%s, %s" "こんにちは" name)
    

    message



    비슷한 느낌이지만 메시지를 표시하고 싶을 때 사용합니다.
    (message "%s, %s" "こんにちは" name)
    

    kill-new



    킬링에 넣는다(요점은 클립보드에 코피페)
    (kill-new "こんにちは!")
    

    insert



    현재 편집중인 버퍼에 문자열 입력
    (insert "こんにちは!")
    

    함수로 해보자.



    먼저 설정



    init.el
    (show-paren-mode 1)
    (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
    

    ↑ 이런 설정을 해 두면 좋다

    실수로 init.el에 씁니다.



    명령은 단지 함수
    (defun my/insert-datetime ()
      "現在のdatetimeを挿入する"
      (interactive)
      (insert
       (format-time-string "%Y-%m-%d %T")))
    

    알아두면 좋은 함수·변수



    buffer-file-name



    파일 이름이 들어 있는 변수
    (defun my/copy-file-name ()
      "いまのファイル名をコピペする"
      (if buffer-file-name
          (kill-new buffer-file-name)
        (user-error "ファイルが開かれてないよ")))
    

    default-directory



    현재 디렉토리
    (defun my/find-file-temporary-file-directory (filename)
      "`temporary-file-directory'."
      (interactive
       (list (read-file-name "Find files: " temporary-file-directory)))
      (find-file filename))
    

    (locate-dominating-file)



    디렉토리 파일
    (locate-dominating-file (f-dirname buffer-file-name) ".idea")
    

    (read-file-name)



    파일 이름을 읽는 함수
    (defun my/find-file-temporary-file-directory (filename)
      "`temporary-file-directory'."
      (interactive
       (list (read-file-name "Find files: " temporary-file-directory)))
      (find-file filename))
    

    좋은 웹페이지 즐겨찾기