관심있는 것들 정리

chatGTP를 이용하여 c/c++ 개발환경 configuration 생성 본문

utility 사용법/emacs

chatGTP를 이용하여 c/c++ 개발환경 configuration 생성

내공강화 2023. 5. 20. 18:08

테스트 환경: MacOS Ventura
Emacs version: 28.2

처음에는 company와 company-lsp 패키지를 이용하는 방식으로 configuration을 제공받았으나, 계속 loading 시 패키지를 찾지 못하는 문제가 발생하여 다른 방식을 제안해 달라고했고, 제안 받은 내용은 다음과 같다.

;; Package 관리자 설정
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; use-package 패키지 설치
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(require 'use-package)

;; C/C++ 개발 환경 설정
(use-package cc-mode
  :ensure t
  :config
  ;; 자동 들여쓰기 설정
  (setq c-default-style "linux"
        c-basic-offset 4
        indent-tabs-mode nil) ; tab 대신 space 사용
  (add-hook 'c-mode-hook 'electric-pair-mode)
  (add-hook 'c++-mode-hook 'electric-pair-mode))

;; company-mode 설정 (자동 완성)
(use-package company
  :ensure t
  :config
  (add-hook 'after-init-hook 'global-company-mode))

;; lsp-mode 설정 (Language Server Protocol)
(use-package lsp-mode
  :ensure t
  :commands lsp
  :hook
  (c-mode . lsp)
  (c++-mode . lsp)
  :config
  (setq lsp-prefer-flymake nil))

;; lsp-ui 설정 (LSP와 UI 통합)
(use-package lsp-ui
  :ensure t
  :commands lsp-ui-mode
  :config
  (setq lsp-ui-sideline-enable nil) ; 사이드라인 비활성화
  (add-hook 'lsp-mode-hook 'lsp-ui-mode))

;; 테마 설정 (원하는 테마로 변경 가능)
(use-package doom-themes
  :ensure t
  :config
  (load-theme 'doom-one t))

;; 사용자 설정 파일
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file)

문제없이 loading 잘 되고, 자동 완성, class 내부 member function, member variable에 대한 자동 완성도 깔끔하게 잘 된다.

욕심이 자꾸 생겨, switch() 구문에 대해 case 들여쓰기가 되도록 추가 후 tab을 이용해서도 자동완성이 되도록 수정

;; Package 관리자 설정
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; use-package 패키지 설치
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(require 'use-package)

;; C/C++ 개발 환경 설정
(use-package cc-mode
  :ensure t
  :config
  ;; 자동 들여쓰기 설정
  (setq c-default-style "linux"
        c-basic-offset 4
        indent-tabs-mode nil) ; tab 대신 space 사용
  (add-hook 'c-mode-hook 'electric-pair-mode)
  (add-hook 'c++-mode-hook 'electric-pair-mode)

  ;; switch 문의 case 구문 들여쓰기 설정
  (setq c-offsets-alist
        '((case-label . +))))  ; case 구문 들여쓰기 설정

;; company-mode 설정 (자동 완성)
(use-package company
  :ensure t
  :config
;  (add-hook 'after-init-hook 'global-company-mode)
  (setq company-idle-delay 0.2
        company-minimum-prefix-length 1
        company-selection-wrap-around t
        company-require-match nil
        company-dabbrev-ignore-case nil
        company-dabbrev-downcase nil
        company-tooltip-margin 0)
  (define-key company-active-map (kbd "TAB") 'company-complete-selection)
  (define-key company-active-map (kbd "<tab>") 'company-complete-selection)
  (define-key company-active-map (kbd "RET") 'company-complete-selection)
  (define-key company-active-map (kbd "<return>") 'company-complete-selection)
  (define-key company-active-map (kbd "SPC") nil)
  (define-key company-active-map (kbd "M-SPC") nil))

;; company-quickhelp 설정 (자동완성 도움말 팝업)
(use-package company-quickhelp
  :ensure t
  :after company
  :config
  ;; 팝업 창 지연 시간 설정
  (setq company-quickhelp-delay 0.5)
  (company-quickhelp-mode 1))

;; lsp-mode 설정 (Language Server Protocol)
(use-package lsp-mode
  :ensure t
  :commands lsp
  :hook
  (c-mode . lsp)
  (c++-mode . lsp)
  :config
  (setq lsp-prefer-flymake nil))

;; lsp-ui 설정 (LSP와 UI 통합)
(use-package lsp-ui
  :ensure t
  :commands lsp-ui-mode
  :config
  (setq lsp-ui-sideline-enable nil) ; 사이드라인 비활성화
  (add-hook 'lsp-mode-hook 'lsp-ui-mode))

;; 테마 설정 (원하는 테마로 변경 가능)
(use-package doom-themes
  :ensure t
  :config
  (load-theme 'doom-one t))

;; 사용자 설정 파일
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file)
반응형