디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[정보글] 이맥스 개종 가이드 - 4 (C/C++ 유저 특집)

커헠갤로그로 이동합니다. 2017.06.25 20:47:41
조회 2021 추천 8 댓글 1
														

viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57bd7102ec3efadaa9e434adee09548247f638ccde35296147d4c28624d80424516517ddc338




viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57bd7102ec3efadaa9e434adee09548247f638ccde35296147d4c0de2e8b0722573917c7dd38




"이맥스는 사용자와 함께 진화하는 에디터다"

- 야이미친



<이맥스 개종 가이드>


1편

2편

3편



아 슬슬 힘들어진다


이번 화는 이제 본격적으로 프로그래밍에 도움이 되는 얘기를 하겠습니다..


일단 이맥스에는 메이저모드랑 마이너모드라는게 있음


어떤 파일을 열었을 때 그 순간 이맥스는 단 하나의 메이저 모드를 가질 수가 있음


그리고 여러개의 마이너 모드를 가질 수가 있음


이게 뭔 얘기냐하면,


.hs 라는 파일을 열 때 하스켈 모드가 켜지도록 설정하면,


.hs 확장자 파일을 여는 순간 하스켈 모드가 켜지고 하스켈 모드에 엮여진 모든 마이너모드들이 켜짐


이렇게 마이너 모드들을 메이저 모드에 엮는걸 hook 을 건다고 하는데,


이맥스의 편리함의 핵심임




이맥스에서 보통 자동완성은 auto-complete 랑 company 라는게 있고,


스펠링 체크는 flycheck 이랑 flymake 라는게 있음


얘네는 llvm 처럼 자동완성, 신테스 체킹을 해주는 엔진들이고


그 앞에 llvm-clang 처럼 언어별 데이터를 제공해주는 front-end 를 달아줘야 됨


Elisp 용 프론트엔드들은 이미 있으니까 상관이 없고,


제가 C++을 주로 해봤기 때문에 C++을 기준으로 설명을 하겠습니다.




일단 C++ 에서는 여러개의 front-end 엔진들이 있는데,


대표적으로 Irony랑 rtags 가 있습니다.


irony 가 가장 많이 쓰이는 것 같은데,


제일 강력한건 rtags 임


irony의 경우 윈도우에  돌아가고 rtags는 현재 윈도우로 포팅 작업을 진행하고 있음



irony랑 rtags는 language-server 라고 해서,


이맥스의 패키지와 데이터를 주고 받는 별개의 프로세스들을 갖고 있습니다.


irony는 irony-server 가 있고, rtags는 rc, rdm 이라고 부릅니다.


이 데이터들을 flycheck 한테 제공하기 위해서는


flycheck-irony, flycheck-rtags 라는 패키지를 다운받아야 하고,


company한테 제공하려면


company-irony, company-rtags 를 다운받으면 됩니다.


그 다음에 세팅을 해줘야 됨



viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57bd7102ec3efadaa9e434adee09548146f638cad4322e6440e82048257baa972ef76a60d5a9


듣기로는 엄청 복잡한 것 같은데 생각보다 간단함


절차적으로 나열하면,


M-x package-install RET company RET


M-x package-install RET flycheck RET


M-x package-install RET irony RET


M-x package-install RET company-irony RET


M-x package-install RET flycheck-irony RET


M-x install-irony-server (이 명령어가 맞나.. 좀 다를 수도 있음. 이거는 irony 처음 받을 때 실행해줘야 하는 명령어임)


그 다음에 설정 코드 작성


딱 이 정도


맨 위에 두 줄은 정말 처음에 해주는거고,


그 뒤부터는 새로운 언어를 위한 환경을 구축해줘야 될 때 나머지처럼 프론트엔드만 다운 받으면 됨




저 이상한 use-package 라는건 나중에 설명할테니 그건 무시하고 나머지 코드를 보시면,


(add-hook 'c-mode-common-hook 'irony-mode)


이렇게 돼있음


이게 뭐냐하면 c-mode-common-hook 에다가 새로운 hook 을 달겠다는건데,


그 훅은 irony-mode 라는 함수임


c-common-mode 가 발동되면, c-mode-common-hook의 훅들이 실행되고,


c-mode-common-hook 에는 irony-mode 가 달려 있으니까 irony-mode 함수가 실행됨


irony-mode 함수는 irony 마이너 모드를 시작하는 함수인데,


쉽게 말하면 irony 서버를 띄우고 irony를 사용하는 모드임


c-common-mode-hook은 뭐냐하면 C 계열 언어들의 hook인데,


c-mode, c++-mode, objc-mode 이 중에 하나라도 켜지면 c-common-mode-hook 이 실행됨


당연히 c-mode-hook, c++-mode-hook 도 다 따로 있음




viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57bd7102ec3efadaa9e434adee09548146f638cad4322e6440e82b47257dacc12af26a60d5a9a



저번에 말했지만 add-to-list 는 리스트에 새로운 원소를 추가하는거고,


auto-mode-alist는 어떤 파일을 열 때 어떤 모드를 시작할지를 결정해주는 리스트임


저기다가 내가 C++의 각종 확장자들을 추가해주는 코드임


당연히 각 모드별로 이맥스에서 기본적으로 설정해놓은 확장자들도 있는데,


C++은 확장자도 많다보니 저런 코드를 쓰게 됐음 ㅎㅎ;;


저 확장자를 가진 파일을 여는 순간 C++-mode 가 실행되고 c++-mode-hook 이 실행되고 c-mode-common-hook 이 실행됨




viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57bd7102ec3efadaa9e434adee09548146f638cad4322e6440e82812762cfd962aa96a60d5a9



이거는 다른 예시인데,


이맥스는 기본적으로 마크다운 모드를 제공하고 있지 않아서 markdown-mode 를 패키지 매니저로 받아야됨


저 밑에 :mode 라고 나와있는 부분이 보면 README.md 라는 파일, .md, .markdown 이라는 확장자를 가진 파일을 열면 markdown-mode를 실행하라는 코드임





C++ 에 관해서 몇가지 더 얘기를 하자면,


irony가 괜찮은데, 쓰다보면 rtags가 쓰기 훨씬 좋고 rtags 가 기능이 워낙 많아서 개사기임


근데 C++ 의 컴파일 커맨드 같은걸 설정하기가 굉장히 까다로워서,


이 경우에는 cmake-ide 라는 패키지를 사용할 것을 강력히 추천함


당연히 cmake 로 모든걸 해야된다는 단점이 있음... autotools 랑 make는 지원하는 패키지들이 읎다


Electric pair 라는 패키지를 사용하면 중괄호나 소괄호 이런거 자동으로 해결해주고,


(add-hook 'c-mode-common-hook

          '(lambda ()

             (setq c-default-style "bsd"

  tab-width 4

  indent-tabs-mode nil 

  indent-level 4

  c-basic-offset 4)))


이렇게 하면 4칸 인덴트, 탭 없이 스페이스 인덴트,


BSD 스타일의 인덴테이션을 설정할 수 있습니다.


srefactor 라는 패키지를 사용하면


간단한 리펙토링도 제공하고,


클래스 브라우저 제공해주는 패키지도 있는데 개인적으로는 안 써봤음



하여튼 정말 많은 것들이 있으니 잘 찾아봅시다.




아 맞다 그리고 Elisp 를 포함한 Lisp 계열 언어를 사용할 때는,


Rainbow-delimiters 모드와 Smartparens 또는 paredit 을 꼭 사용합시다...





다음 편에 계속


추천 비추천

8

고정닉 5

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45120 65
2869326 한국 화이트해커들이 블랙해커들보다 자기가 실력좋다고했는데?? [1] 뒷통수한방(1.213) 09:35 23 0
2869325 한국보안회사들은 왜 존재하는거임?? [3] 뒷통수한방(1.213) 09:18 38 0
2869324 4달을 어떻게 참지..? [1] ㅇㅇ(211.234) 09:17 18 0
2869323 ㅇㅅㅇ ♥냥덩이♥갤로그로 이동합니다. 09:14 17 0
2869322 러스트 디코더는 여전히 작업중이며 종결된 상태가 아니다. [5] 프갤러(218.154) 09:04 25 0
2869320 핵심을 얘기하니까 바로 깨갱이냐? [2] 루비갤로그로 이동합니다. 08:49 22 0
2869319 솔직히 서울 30년넘게 살아오면서 서울혜택 느껴본 느낌 3개월도없 [3] 뒷.통수한방(1.213) 08:48 27 0
2869318 “정부의 R&D 투자, 국가 총지출 5% 이상 의무화” 프갤러(183.101) 08:45 13 0
2869317 ms가 비주얼스튜디오에 러스트지원도 안하고.. 러스트 끝물인듯 ㅇㅇ(183.101) 08:35 17 0
2869316 러스트 rav1d 벤치마크 조작 가능성도 나오는 얘기입니다. [1] 루비갤로그로 이동합니다. 08:34 19 0
2869315 러스트 ffmpeg: 기생 논란, 지적 정직성 논란은? 루비갤로그로 이동합니다. 08:28 15 0
2869313 러스트가 ffmpeg dav1d를 어떻게 파괴했나. 루비갤로그로 이동합니다. 08:27 22 0
2869310 러스트 맹신자의 '광기'와 '발작': 그들이 감추는 '설계 결함'의 진실 루비갤로그로 이동합니다. 08:20 18 0
2869309 러스트 = 앱히키 = 웹히키 프갤러(222.108) 08:19 14 1
2869307 ffmpeg 러스트 디코더에대한 기술적인 부분은 이걸 참고하도록 프갤러(42.18) 08:16 21 0
2869306 개업 축 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 08:14 27 0
2869305 러스트 맹신자의 '허위사실 유포'와 '지능 타령': 당신의 비루한 민낯을 루비갤로그로 이동합니다. 08:13 19 0
2869304 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:10 16 0
2869303 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08:09 18 0
2869302 리눅스 커널이 동적 링크로 동작한다는 지능으로 러까책 써봤자 프갤러(223.38) 08:09 19 0
2869301 러스트: ffmpeg 사태 조명, asm 85% + unsafe Rust [1] 루비갤로그로 이동합니다. 08:08 18 0
2869300 러스트 광신도의 저러한 태도 때문에 러스트하면 이를 갈죠 루비갤로그로 이동합니다. 08:03 12 1
2869299 사람은 겸손하고 깝치지 말아야함 프갤러(222.108) 07:59 26 1
2869298 러스트에 대한 세상 여론: 전 세계적으로 안티 여론 형성 중입니다 [2] 루비갤로그로 이동합니다. 07:58 20 0
2869297 리눅스 커널이 동적 링크로 돌아간다는 지식수준으로 논쟁하려는 오만함 프갤러(42.18) 07:56 22 0
2869295 강남 8평 1.5룸 월 180만원. 적정연봉이 얼마냐? [1] ㅇㅇ(223.38) 07:31 28 0
2869293 러스팅 소울, 4장: 나르시시즘의 그림자 속에서 루비갤로그로 이동합니다. 07:19 15 0
2869291 앱히키년 씨발 나대더니 아예 사라졌네 프갤러(222.108) 06:54 24 0
2869289 디시유명재 프갤러(210.101) 06:37 14 0
2869287 우리나라에 진짜 프로그래밍 잘하는 사람? [1] 루비갤로그로 이동합니다. 05:23 45 1
2869285 러스트 빠돌이 자아가 붕괴됐나 봄 ㅋㅋ 루비갤로그로 이동합니다. 05:16 25 1
2869281 아버지가 2핀 1핀 1핀 대각선 휘었는데 이걸로 a.s 한다니까 절래절래 넥도리아(121.139) 04:29 20 0
2869279 MCP로 게임 만들어보려는데 필요 사양 프갤러(112.151) 03:20 20 0
2869277 채용 열렷다 프갤러(221.163) 02:52 35 0
2869272 자본주의 공산주의 비유하면 이거임 [5] 야옹아저씨갤로그로 이동합니다. 01:54 63 6
2869270 일본과 한국 집값 비교가 의미없는 이유 프로외노자갤로그로 이동합니다. 01:47 26 0
2869268 테슬라 너무떨어진다ㅜㅠ105 타룰갤로그로 이동합니다. 01:36 37 0
2869267 친구 아버지 장례식 2번 가도 되냐? [6] 아스카영원히사랑해갤로그로 이동합니다. 01:23 56 0
2869266 살암인에서 공고 지원자 보는데 허수많노 ㅇㅇ(180.68) 01:20 28 0
2869265 초봉 2800에서 2배 되는데 4년 걸렸다 [6] 프갤러(222.228) 01:00 85 2
2869264 우리나라는 진짜 프로그래밍 잘하는 사람이 없음 프갤러(116.124) 00:56 33 0
2869263 생각해보니 나 프로그램 있잖아.... 넥도리아(121.139) 00:48 23 0
2869262 러스트의 뛰어남. 러까들 수준만 봐도 알 수 있지 않나? 프갤러(110.8) 00:46 21 0
2869261 와이프랑 했다 hrin(220.120) 00:43 59 0
2869260 강화도 방사능 서울망하나 프갤러(183.101) 00:25 30 0
2869259 메모어플보다 커뮤니티, 블로그가 이미지 손상이 심해? [2] ㅇㅇ(211.224) 07.02 31 0
2869258 러스트 제대로 까는게 현실적으로 불가능한 이유 프갤러(110.8) 07.02 30 0
2869257 cpp26이야말로 현실과 완전히 동떨어진 뜬구름 잡는 얘기지 [3] 프갤러(110.8) 07.02 52 0
2869256 c++ 26 vs rust 뒷통수한방(1.213) 07.02 43 0
뉴스 ‘풋풋한 로맨스‘ 이채연X시온, 슬픈 이별로 안방극장 울렸다! 사랑∙꿈 이룰 수 있을까? 디시트렌드 07.02
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2