>백엔드 개발 >C++ >GNU Emacs를 사용한 C 개발

GNU Emacs를 사용한 C 개발

Patricia Arquette
Patricia Arquette원래의
2024-12-28 08:28:12710검색

C Development with GNU Emacs

Emacs는 프로그래밍을 염두에 두고 설계되었으며 기본적으로 C, Python 및 Lisp와 같은 언어를 지원하며 구문 강조, 사용자 정의 가능한 코딩 스타일, 실시간 오류 감지와 같은 고급 기능을 제공합니다. 내장된 Lisp 인터프리터는 Emacs의 적응성을 높여 사용자가 특정 작업 흐름에 맞게 편집기를 구성하거나 완전히 새로운 기능을 만들 수 있도록 해줍니다.

풍부한 확장 에코시스템을 통해 학술 저술부터 시스템 프로그래밍까지 다양한 분야에서 관련성을 유지하는 동시에 사용자 정의 가능한 인터페이스를 통해 사용자는 환경을 최적화하여 생산성을 극대화할 수 있습니다.

Emacs를 선택하는 이유는 무엇입니까?

Emacs는 단순한 텍스트 편집기 그 이상입니다. 프로그래밍, 작성 및 사용자 정의를 위한 강력하고 확장 가능한 플랫폼입니다. VS Code 또는 IntelliJ IDEA와 같은 최신 편집기와 달리 Emacs는 유연성과 프로그래밍 가능성을 자랑합니다. 이를 통해 사용자는 워크플로우를 심층적으로 맞춤화하여 정확한 요구 사항에 적합한 환경으로 전환할 수 있습니다. C로 코딩하든, 대규모 프로젝트를 관리하든, 소설을 쓰든 Emacs는 귀하의 요구 사항에 맞춰 조정할 수 있습니다.

신규 사용자에게는 이것이 부담스러워 보일 수도 있지만, 일단 원리를 이해하고 나면 Emacs는 여러분과 함께 성장하는 도구가 됩니다. 이 가이드의 목적은 기본 구성부터 고급 통합까지 간소화된 Emacs 환경을 설정하여 모든 단계에서 생산성을 보장하는 데 도움이 되는 것입니다.

목차

  • init.el 생성
  • init.el 디렉토리가 올바른지 확인
  • Emacs 기본 구성
  • Linux 커널 코딩 스타일 패턴 추가
  • MELPA 패키지 관리자 설치 및 구성
  • Clang LSP 서버 설치
  • 컴퍼니, 프로젝타일, 트리막스, 마지트를 통한 C 개발 강화
  • GNU Global, GTags 및 Helm-Gtags 추가
  • 코드 템플릿에 YASnippet 사용
  • 컨텍스트 인식 탐색을 위한 의미 체계 구성
  • 실제 개발 작업 흐름 예시
  • 치트 시트
  • 플러그인 참고자료
  • 추가 학습 리소스

단계:

init.el 생성

  1. 시스템에서 Emacs를 엽니다.
  2. C-x C-f 명령(Ctrl과 x를 누른 다음 Ctrl과 f를 누름)을 사용하면 편집할 파일이 열립니다.
  3. Emacs 구성 파일을 만들거나 편집하려면 파일 경로 ~/.emacs.d/init.el을 입력하고 Enter를 누르세요.
  4. 버퍼에 원하는 구성을 추가합니다. 완료되면 C-x C-s를 사용하여 변경 사항을 저장합니다(Ctrl과 x를 누른 다음 Ctrl과 s를 누릅니다).

init.el 디렉토리가 올바른지 확인

Emacs 구성이 항상 init.el 파일의 올바른 디렉터리를 참조하도록 하려면 init.el 파일 상단에 다음 코드 조각을 추가하세요.

(setq user-emacs-directory "~/.emacs.d/")

이는 user-emacs-directory 변수를 ~/.emacs.d/로 명시적으로 설정하여 Emacs가 초기화 파일 및 관련 구성에 대해 지정된 경로를 사용하도록 합니다. 이 접근 방식은 환경별 설정으로 인해 Emacs가 다른 디렉토리를 참조할 수 있는 잠재적인 문제를 방지합니다.

Emacs의 기본 구성

다음은 목적을 이해하는 데 도움이 되도록 간단하고 실용적인 Emacs 설정을 명확하게 설명합니다. 이 구성은 유용성을 향상시키고 인터페이스를 단순화하며 효율적인 코딩 경험을 보장합니다.

이 줄은 모든 백업 파일을 단일 디렉터리(~/.saves)로 통합합니다. 프로젝트를 깔끔하게 유지하고 작업 공간이 어수선해지는 것을 방지합니다.

(setq backup-directory-alist `(("." . "~/.saves")))

이는 방해 요소를 줄이기 위해 도구 모음, 스크롤 막대, 도구 설명, 메뉴 표시줄과 같은 불필요한 인터페이스 요소를 제거합니다. 더욱 깔끔한 인터페이스를 통해 시각적인 잡음 없이 코딩에 집중할 수 있습니다.

(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)

이 설정은 Emacs 시작 화면을 비활성화하고 *스크래치* 버퍼에서 기본 메시지를 제거하며 시스템 벨을 무음으로 설정합니다. 처음부터 방해받지 않는 환경을 조성합니다.

(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)

가시성을 높이기 위해 커서가 상자 스타일로 설정되었으며 깜박임 효과가 비활성화되었습니다. 괄호와 들여쓰기 자동 페어링이 가능해 코딩이 더욱 부드럽고 빨라집니다.

(setq user-emacs-directory "~/.emacs.d/")

더 쉬운 탐색을 위해 줄 번호가 전체적으로 표시되며, 열 번호는 각 줄의 커서 위치를 추적하기 위해 상태 표시줄에 표시됩니다.

(setq backup-directory-alist `(("." . "~/.saves")))

이 구성은 모드 라인에 깔끔하고 간결한 시간 표시를 추가하여 요일, 날짜, 시간을 24시간 형식으로 표시합니다. 인터페이스를 최소화하기 위해 부하 평균은 제외됩니다.

(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)

입력할 때 선택 항목이 강조 표시된 텍스트를 자동으로 대체하고 클립보드 통합으로 Emacs와 다른 애플리케이션 간에 원활한 복사 및 붙여넣기가 보장됩니다.

(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)

모든 인코딩은 UTF-8로 설정되어 최신 텍스트 형식과의 호환성을 보장하고 특히 국제 텍스트 또는 소스 코드로 작업할 때 인코딩 문제를 방지합니다.

(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)

구문 강조는 전역 글꼴 잠금 모드를 통해 전역적으로 활성화됩니다. 시각적 라인 모드로 긴 줄을 자연스럽게 감싸줍니다. 커서가 근처에 있으면 괄호가 강조 표시되며, 빠른 액세스를 위해 최근에 열었던 파일이 추적됩니다.

(global-display-line-numbers-mode t)
(column-number-mode t)

탱고탱고 테마는 시각적으로 매력적인 색상 구성을 제공합니다. 긴 코딩 세션 동안 가독성을 높이기 위해 글꼴은 굵은 두께와 크기 15.2pt의 "Consolas"로 설정되었습니다.

(setq display-time-format "%a %b %d %R"
      display-time-interval 60
      display-time-default-load-average nil)
(display-time-mode 1)

참고: 기억하세요. 우리는 Emacs를 구성하기 위해 함수형 프로그래밍 언어인 Emacs Lisp(Elisp)를 사용하고 있습니다. 이는 매우 유연하고 프로그래밍 가능한 사용자 정의가 가능하다는 점에서 큰 이점입니다. 강력한 Lisp 방언으로 로직을 작성하는 능력 덕분에 Emacs는 단순한 편집기가 아니라 개인화된 워크플로우를 위한 플랫폼이 됩니다.


Linux 커널 코딩 스타일 패턴 추가

아래 제공된 구성은 Emacs가 Linux 커널 코딩 스타일을 엄격하게 준수하도록 설정하여 8자 탭, K&R 중괄호 배치 및 명확한 가독성을 강조합니다. 여기에는 인수 목록을 위한 사용자 정의 정렬 기능, 커널 관련 파일(예: Kbuild, Kconfig 또는 커널 헤더가 있는 파일) 자동 감지가 포함되어 있으며 적절한 스타일을 자동으로 적용합니다. 이는 일관성을 보장하고 Emacs에서 커널 코드 편집을 단순화합니다.

linux-kernel-coding-style/setup 함수는 indent-tabs-mode, tab-width 및 c-basic-offset과 같은 커널별 설정에 대해 Emacs를 8로 구성하는 반면, linux-kernel-coding-style/ c-lineup-arglist-tabs-only 함수는 탭을 사용하여 인수 목록을 정렬하고 커널 지침을 준수합니다. 이러한 후크는 Linux 커널 파일을 편집할 때 자동으로 c 모드에 스타일을 적용하여 생산성과 코딩 표준 준수를 향상시킵니다.

(setq select-enable-primary nil
      select-enable-clipboard t)
(delete-selection-mode 1)

이 구성을 Emacs 초기화 파일(init.el)에 추가하세요. 이제 Emacs는 Linux 커널 파일을 자동으로 감지하고 적절한 코딩 스타일을 적용하여 시간을 절약하고 커널 코딩 표준을 준수하도록 보장합니다.


MELPA 패키지 관리자 설치 및 구성

MELPA를 사용하면 Emacs에 추가 패키지를 쉽게 설치할 수 있습니다.

단계:

  • Emacs에 MELPA 추가:
(setq user-emacs-directory "~/.emacs.d/")
  • 패키지가 없으면 자동으로 설치:
(setq backup-directory-alist `(("." . "~/.saves")))

init.el 파일을 변경하거나 새 구성을 추가한 후 닫았다가 다시 열지 않고도 Emacs를 새로 고칠 수 있습니다.

  1. init.el 파일 다시 로드:

    • init.el 버퍼에 있는 동안 M-x(Alt x)를 누르고 eval-buffer를 입력한 다음 Enter를 누르세요.
    • 또는 코드 블록 끝에 있는 단축키 C-x C-e를 사용하여 평가할 수도 있습니다.
  2. 코드 수동 평가:

    • 다시 로드하려는 코드 조각을 선택하고 M-x를 누른 다음 eval-region을 입력하고 Enter를 누르세요.

이렇게 하면 다시 시작하지 않고도 Emacs 구성에 변경 사항을 즉시 적용할 수 있습니다


Clang LSP 서버 설치

LSP(언어 서버 프로토콜)는 자동 완성 및 실시간 오류 확인과 같은 고급 기능을 제공합니다.

필수 요구사항

윈도우

  • LLVM/Clang:
    • 공식 웹사이트(LLVM 릴리스)에서 LLVM 설치 프로그램을 다운로드하세요.
    • 설치하는 동안 시스템 PATH에 LLVM을 추가하세요.

리눅스

  • 데비안/우분투:
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
  • 페도라:
(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)

FreeBSD

  • clangd 설치:
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)

단계:

  • lsp 모드 및 회사 모드 설치:
(global-display-line-numbers-mode t)
(column-number-mode t)
  • 필요한 경우 clangd 경로를 구성하세요:
(setq display-time-format "%a %b %d %R"
      display-time-interval 60
      display-time-default-load-average nil)
(display-time-mode 1)
  • 선택 사항: lsp-ui를 사용하여 고급 구문 강조 설정:
(setq select-enable-primary nil
      select-enable-clipboard t)
(delete-selection-mode 1)

LSP란 무엇이며 왜 사용합니까?

LSP(Language Server Protocol)는 자동 완성, 오류 검사, 코드 탐색과 같은 기능을 제공하여 편집기와 프로그래밍 언어 간의 격차를 해소합니다. 이는 헤더 관리, 디버깅 및 대규모 코드베이스 탐색이 어려울 수 있는 C/C 개발에 특히 유용합니다.

Emacs에서 LSP를 설정하면 다음과 같은 기능을 얻을 수 있습니다.

  • 입력 시 실시간 구문 오류를 확인하세요.
  • 함수 또는 변수 정의로 즉시 이동합니다.
  • 코드 완성을 위한 지능형 제안에 액세스하세요.

이로 인해 Emacs는 가볍고 사용자 정의 가능한 특성을 유지하면서 최신 IDE와 경쟁할 수 있습니다.

중대, 발사체, Treemacs 및 Magit

C 개발을 위한 Emacs 설정을 향상하려면 Company, Projectile, TreemacsMagit을 통합해야 합니다. 회사는 C 프로그래밍 자동 완성 기능을 제공하여 함수, 변수, 키워드에 대한 실시간 제안을 가능하게 하여 코딩을 더 빠르고 효율적으로 만듭니다. company-clang을 사용하도록 구성하면 C 개발에 맞는 강력한 지원을 보장할 수 있습니다.

Projectile은 빠른 탐색, 파일 검색, 프로젝트 편집을 통해 프로젝트 관리를 간소화합니다. 프로젝트 구조를 시각적인 트리 기반 표현으로 제공하는 Treemacs와 완벽하게 결합되어 파일을 직관적으로 찾고 관리하는 데 도움이 됩니다. 마지막으로 Magit은 Git용 고급 인터페이스로, Emacs 내에서 직접 버전 제어를 위한 강력한 도구를 제공합니다.

C-x g와 같은 단축키를 사용하면 커밋, 분기, 병합 등의 작업을 대화형으로 수행하여 작업 흐름과 생산성을 높일 수 있습니다. Emacs 환경에서 이러한 도구를 설정하기 위한 전체 구성은 다음과 같습니다.

(setq user-emacs-directory "~/.emacs.d/")

실제 작업 흐름 예

실제 시나리오에서 이러한 도구를 어떻게 결합할 수 있는지 살펴보겠습니다.

  1. 프로젝트 열기:
    • Projectile을 사용하여 프로젝트 디렉토리 내에서 파일을 빠르게 찾으려면 C-c p f를 사용하세요.
  2. 시각적으로 파일 탐색:
    • M-0으로 Treemacs를 열고 화살표 키를 사용하여 프로젝트 구조를 탐색하세요. 파일을 두 번 클릭하여 엽니다.
  3. Magit을 사용한 Git 워크플로:
    • 스테이지 변경: C-x g로 Magit을 열고 s를 눌러 파일을 스테이지하세요.
    • 커밋: 메시지와 함께 변경 사항을 커밋하려면 c c를 누르세요.
    • 푸시: P를 사용하여 원격 저장소에 변경 사항을 푸시합니다.
  4. 코드 완성:
    • .c 파일을 편집하는 동안 함수 이름을 부분적으로 입력하고 Tab을 눌러 회사 모드 제안을 사용하세요.

기사에 추가할 수 있는 개선 사항

  1. GNU 글로벌 및 GTags 구성:
    • 코드 탐색을 위한 GNU Global 및 GTag 설정 지침을 추가합니다.
(setq user-emacs-directory "~/.emacs.d/")
  1. Helm-Gtags 통합:
    • 프로젝트 탐색을 향상하기 위해 helm-gtags 구성을 포함합니다.
(setq backup-directory-alist `(("." . "~/.saves")))
  1. Yasnippet 템플릿:
    • 코드 템플릿에 YASnippet 포함:
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
  1. 의미적 구성:
    • 컨텍스트 인식 코드 완성 및 구문 분석을 위한 의미 체계 추가:
(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
  1. 추가 코드 탐색 기능:
    • 참조 수집을 위해 semantic-symref를 언급하세요.
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)

이러한 추가 기능은 Emacs의 고급 탐색, 프로젝트 관리 및 자동화 도구에 대한 지원을 제공하고 기사를 최신 C/C 개발을 위한 모범 사례에 맞춰 기존 콘텐츠를 향상시킵니다.


치트 시트

C Development with GNU Emacs

C Development with GNU Emacs


플러그인 참고자료

  • lsp-mode: 자동 완성 및 오류 검사를 위한 언어 서버 프로토콜 지원. GitHub
  • 회사 모드: 상황 인식 자동 완성. GitHub
  • lsp-ui: lsp-mode에 대한 UI 개선. GitHub
  • 발사체: 프로젝트 탐색 및 관리. GitHub
  • treemacs: 트리 기반 파일 탐색기. GitHub
  • magit: Emacs용 Git 인터페이스. GitHub
  • ggtags: 코드 탐색을 위한 GNU 전역 통합. GitHub
  • helm-gtags: GNU Global 및 Helm을 사용한 탐색. GitHub
  • yasnippet: 재사용 가능한 코드를 위한 스니펫 관리. GitHub
  • 의미: 고급 코드 구문 분석 및 탐색. GNU CEDET

추가 학습 리소스

  • 초보자를 위한 Emacs: Emacs 설정 및 사용에 대한 초보자 친화적인 가이드입니다. 링크
  • Emacs Lisp 소개: Lisp를 사용하여 Emacs를 사용자 정의하는 방법을 알아보세요. 링크
  • Linux 커널 코딩 스타일: 커널 코딩 표준에 대한 공식 문서입니다. 링크
  • C 개발을 위한 Emacs 설정: C/C 프로그래밍을 위한 Emacs 구성을 위한 실용적인 가이드입니다. 링크

위 내용은 GNU Emacs를 사용한 C 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.