Code Editing, Build, Terminal and Documents
이 장에서 다루는 것
모델 편집기가 아니라 일반 개발 도구를 다룹니다. 프로젝트의 code 폴더에 있는 C · C++ · Rust
소스를 편집하고 빌드·실행하는 방법, 통합 터미널, doc 폴더의 Markdown 문서 편집기입니다.
- 대상 독자: PAIO 안에서 애플리케이션 코드를 직접 작성·빌드하려는 개발자
- 선행 조건: 워크스페이스와 프로젝트가 열려 있는 상태
- 원격(SSH · 컨테이너 · WSL)에서 편집·빌드한다면 17. 원격 개발을 함께 봅니다.
16.1 코드 에디터 (C / C++ / Rust)
16.1.1 어떤 파일이 열리나
탐색기에서 파일을 더블클릭하면 확장자에 따라 편집기가 정해집니다.
| 언어 | 확장자 | 상태바 표시 |
|---|---|---|
| C | .c, .h | C |
| C++ | .cpp, .hpp, .cc, .cxx, .hh, .hxx | C++ |
| Rust | .rs | Rust |
코드 에디터는
code와doc폴더 아래에서만 적용됩니다. 다른 위치에 있는 같은 확장자 파일은 XML 에디터로 열립니다. 원격 워크스페이스에서는 이 폴더 제한 없이 확장자만으로 결정됩니다.
파일이 탐색기에 보이지 않으면 폴더별 표시 필터에 걸린 것입니다
(4.4 참고). code 폴더는 소스 확장자 외에 CMakeLists.txt ·
Makefile · Cargo.toml · Cargo.lock 을 이름으로 함께 보여 주고, target 폴더는 항상 숨깁니다.
16.1.2 화면과 단축키
편집 영역 아래에 PROBLEMS 패널이 있고, 그 사이 경계를 드래그해 비율을 바꿉니다. 빌드를 시작하면
그 아래에 Output 패널이 나타납니다. 상태바에는 커서 위치(Ln 1, Col 1 — 클릭하면 줄 이동
대화상자), 인코딩, 파일 언어가 표시됩니다. 줄바꿈 문자는 저장할 때 항상 LF로 고정됩니다.

code 폴더의 main.c 를 연 화면입니다. 줄 번호와 접기 표시, 오른쪽 위 미니맵이 보이고, 2행
"calculator.h" 아래에 주황색 물결선이 그어져 있습니다. 화면 아래 PROBLEMS 는 접힌 채 개수만
1 로 알리고 있고, 맨 아래 상태바가 Ln 1, Col 1 · UTF-8 · C 를 표시합니다.
| 단축키 | 동작 |
|---|---|
Ctrl+B | Build — 현재 파일 하나만 컴파일합니다(16.2.1) |
Ctrl+F5 | Build & Run — 프로젝트 형태를 판별해 빌드하고 실행합니다 |
Ctrl+S | 저장 |
Shift+Alt+F | 문서 서식 정리 |
Alt+O | 헤더 ↔ 소스 전환 |
Ctrl + 클릭 | 정의로 이동. 언어 서버가 없으면 #include "..." 경로를 따라갑니다 |
Ctrl+B는 자리에 따라 다르게 동작합니다. 코드 에디터 안에서는 Build, 코드 에디터 밖에서는 좌측 탐색기 패널을 접었다 폈다 합니다.
16.1.3 언어 서버 (LSP)
자동 완성 · 호버 · 정의로 이동 · 참조 찾기 · 시그니처 도움말 · 서식 정리가 언어 서버로 동작합니다. C/C++는 clangd, Rust는 rust-analyzer를 쓰며 앱에 함께 들어 있어 따로 설치할 필요가 없습니다. 번들 바이너리가 없으면 시스템에 설치된 것을 찾습니다.
- 이름 바꾸기(
F2)와 quick fix는 제공되지 않습니다. - C 파일에서는 23종, C++ 파일에서는 45종의 코드 스니펫이 자동 완성 목록 뒤쪽에 나타납니다. Rust에는 스니펫이 없습니다.
- clangd는 프로젝트 루트를 기준으로 동작하므로
compile_commands.json은 프로젝트 루트에 둡니다.
자동 완성과 진단이 조용히 동작하지 않을 때. 상태바의
⚠는 언어 서버 프로세스가 오류로 끝났을 때만 나타납니다(클릭하면Restart할 수 있는 대화상자가 열립니다). 서버가 아예 시작되지 못한 경우 — 번들에도 시스템에도 바이너리가 없거나 컨테이너 안에 cargo가 없는 경우 — 에는 아무 표시도 나오지 않습니다. 표시가 없는데 기능이 안 되면 이 경우를 먼저 의심합니다.
code/Cargo.toml은 자동으로 만들어지고 덮어써집니다. 코드 파일을 열면 PAIO가code아래.rs파일을 찾아Cargo.toml을 다시 만듭니다. C 파일을 열어도 마찬가지입니다. 따라서 이 파일을 직접 고쳐 의존성을 넣어도 다음에 코드 파일을 열면 사라집니다. 손으로 관리하는 Cargo 프로젝트는code바로 아래가 아니라 하위 폴더에 두세요.
16.1.4 PROBLEMS 패널
파일별로 묶인 진단 목록입니다. 심각도(Error / Warning / Info / Hint) 배지와 파일 · 줄 번호 ·
메시지가 표시되고, 항목을 클릭하면 그 위치로 이동합니다(다른 파일이면 새 탭으로 엽니다). 헤더의 숫자
배지는 오류 + 경고의 합이며, 진단이 없으면 No problems found 가 표시됩니다. 표시 범위는 현재 파일이
속한 code 폴더 아래 전체입니다.

앞 그림의 1 을 펼친 모습입니다. 파일 이름(main.c — 1 warning)으로 묶이고, 그 아래 행에 심각도
배지 · 파일 · 위치(2:11) · 메시지가 놓입니다. 여기 잡힌 것이 바로 아래에서 설명하는 #include
대소문자 경고입니다. 탐색기에 Cargo.toml 과 Cargo.lock 이 보이는 것은 코드 파일을 열 때 자동으로
만들어졌기 때문입니다(16.1.3).
컴파일러 오류는 여기에 오지 않습니다. PROBLEMS에 모이는 것은 언어 서버 진단과
#include대소문자 검사 결과뿐입니다. gcc · g++ · cmake · cargo가 낸 오류는 편집 화면의 밑줄과 Output 패널에만 나타납니다. 게다가 컴파일러 진단은 파일별로 걸러지지 않으므로, 여러 파일을 빌드하면 다른 파일의 오류가 현재 파일의 같은 줄에 표시될 수 있습니다.
#include 대소문자 검사. #include "..." 의 파일 이름이 실제 파일과 대소문자만 다르면 경고가
붙습니다. Windows에서는 열리지만 Linux에서는 빌드가 깨지기 때문입니다.
Include case mismatch: "calculator.h" should be "Calculator.h" (will fail on Linux)
하단 유틸리티 패널의 Problems 탭은 코드 진단과 무관합니다. 늘 고정 문구만 표시됩니다.
16.1.5 저장과 외부 변경
Ctrl+S 로 저장합니다. 쓰기에 실패하면 더티 표시가 그대로 남습니다.
코드 에디터는 저장하지 않은 편집을 지켜 주지 않습니다. 열려 있는 파일이 디스크에서 바뀌면 (원격 빌드 스크립트, git 체크아웃 등) 확인 없이 디스크 내용으로 교체되고 더티 표시가 지워집니다. 모델 편집기와 다른 점이므로, 외부에서 파일을 건드리기 전에 먼저 저장해 두세요.
16.2 빌드와 실행
16.2.1 Build와 Build & Run은 다릅니다
Ctrl+B(Build)는 프로젝트를 빌드하지 않습니다. 현재 열려 있는 파일 하나만 gcc / g++로 컴파일합니다.CMakeLists.txt나Cargo.toml이 있어도 찾지 않으며,.rs파일에도 gcc를 호출하므로 실패합니다. 프로젝트 단위 빌드는Ctrl+F5(Build & Run) 입니다.
두 동작 모두 저장하지 않은 편집이 있으면 먼저 저장한 뒤 빌드합니다.
16.2.2 Build & Run이 판별하는 순서
현재 파일이 있는 폴더에서 위로 올라가며 순서대로 판별하고, 먼저 맞는 것에서 멈춥니다.
| 순서 | 조건 | 실행 |
|---|---|---|
| 1 | 위쪽에 CMakeLists.txt 가 있음 | CMake 구성 + 빌드 (실행은 하지 않음) |
| 2 | 위쪽에 Cargo.toml 이 있음 | cargo run |
| 3 | 둘 다 없고 파일이 .rs | 안내 메시지만 출력 |
| 4 | 그 밖 (.c / .cpp 단일 파일) | 컴파일한 뒤 실행 |
CMake 경로는 빌드까지만 하고 실행 파일을 실행하지 않습니다. 실행이 필요하면 터미널에서 직접 실행합니다.
16.2.3 실행되는 명령과 출력
| 방식 | 명령 |
|---|---|
| 단일 파일 (C) | gcc -Wall -g <파일> -o <출력> |
| 단일 파일 (C++) | g++ -Wall -g -std=c++17 <파일> -o <출력> |
| CMake | cmake -S <루트> -B <루트>/build -DCMAKE_BUILD_TYPE=Debug 후 cmake --build |
| Cargo | cargo run --manifest-path <루트>/Cargo.toml |
빌드 타입은 Debug 로 고정입니다. 릴리스 빌드가 필요하면 터미널에서 직접 실행합니다.
빌드를 시작하면 Output 패널이 열려 이전 출력을 지우고 실시간으로 결과를 보여 줍니다(표준 오류는
빨간색). 첫 줄에 실행한 명령이, 마지막에 Process exited with code <숫자> 가 나옵니다. 실행 단계까지
가면 프로그램 출력이 이어 붙습니다.

main.rs 에서 Ctrl+F5 를 눌러 Cargo 경로로 빌드하고 실행한 Output 패널입니다. 패키지 이름이
paio-code 인 것은 Cargo.toml 이 자동으로 만들어졌기 때문이고(16.1.3), dev 프로필로 빌드된 것이
위에서 말한 Debug 고정입니다.
- 진행 중인 빌드를 중단하는 버튼은 없습니다. 원격 빌드는 120초에서 강제 종료되고 로컬 단일 파일 컴파일은 60초에서 끊기지만, 로컬 CMake · Cargo 빌드에는 제한이 없어 터미널에서 직접 정리해야 합니다.
- 원격 상태에서는 실행 위치가 그 환경(컨테이너 · SSH · WSL)으로 바뀝니다. 다만 Connect to WSL 로 연 워크스페이스는 빌드는 배포판 안에서 되지만 실행 단계가 호스트 경로로 처리되어 실패할 수 있습니다. 이때는 터미널에서 실행 파일을 직접 실행합니다.
16.2.4 사용하는 툴체인
Rust 툴체인 · CMake · gcc가 앱에 함께 들어 있어 따로 설치하지 않아도 빌드됩니다. 번들 도구가
있으면 그것을 먼저 쓰고, 없으면 시스템 PATH 의 도구로 넘어갑니다. 설치본에 무엇이 들어 있는지에
따라 실제로 쓰이는 도구가 달라질 수 있습니다.
컴파일러를 아예 찾지 못하면 원격 빌드에서는 설치 안내가 함께 출력됩니다. 로컬 빌드에서는 셸이 낸 오류가 그대로 표시됩니다.
Hint: 'gcc' was not found in this environment. Install a C/C++ toolchain (e.g. 'sudo apt install build-essential' on Debian/Ubuntu).
16.3 통합 터미널
16.3.1 여는 방법과 조작
Ctrl+` 또는 Ctrl+J 로 터미널 패널을 엽니다(터미널이 하나도 없으면 자동으로 하나 만듭니다).
상태바 왼쪽의 터미널 버튼은 패널만 토글하며 터미널을 만들지는 않습니다. 프로젝트 노드를 우클릭해
Open in Terminal 을 고르면 그 프로젝트 폴더에서 터미널이 열립니다(이 메뉴는 프로젝트 노드에만
있습니다).
패널 헤더 오른쪽에서 글자 크기 조절 · 터미널 추가 · 분할 · 종료 · 패널 닫기를 다룹니다. 터미널 목록은 패널 오른쪽 사이드바에 있고, 항목을 클릭해 전환합니다. 마지막 터미널을 닫으면 패널이 자동으로 숨겨집니다.

아래쪽에 열린 터미널입니다. 오른쪽 사이드바의 powershell C:\Dev\PA… 가 열려 있는 터미널 하나를
가리키고, 작업 디렉터리는 프로젝트 폴더로 잡혀 있습니다. 따로 설치한 적이 없는데도 cargo 가 바로
실행되는 것은 번들 툴체인이 PATH 앞에 붙기 때문입니다(16.3.3).
| 입력 | 동작 |
|---|---|
Tab | 셸의 자동 완성으로 전달됩니다 |
Ctrl+C | 선택 영역이 있으면 복사, 없으면 셸로 중단 신호 |
Ctrl+V / 우클릭 | 붙여넣기 (우클릭은 선택 영역이 있으면 복사) |
Split Terminal 을 눌러도 그 자리에서 화면이 둘로 나뉘지는 않습니다. 사이드바에서 다른 터미널을 골랐다가 돌아오면 두 터미널이 좌우로 나란히 표시됩니다.
16.3.2 어떤 셸이 열리나
작업 디렉터리와 원격 연결 상태를 보고 결정되며, 먼저 맞는 조건에서 멈춥니다.
| 순서 | 조건 | 열리는 셸 |
|---|---|---|
| 1 | 셸을 직접 지정한 경우(New WSL Terminal 등) | 지정한 것 |
| 2 | 컨테이너 연결됨 | 컨테이너 안의 셸 |
| 3 | SSH 연결됨 | 원격 SSH 셸 |
| 4 | 작업 디렉터리가 WSL 경로 (Windows) | 해당 배포판 |
| 5 | 그 밖 | 로컬 셸 |
로컬 기본 셸은 Windows가 PowerShell, macOS · Linux는 환경 변수 SHELL(없으면 각각 zsh · bash)입니다.
16.3.3 번들 툴체인과 PATH
터미널을 띄울 때 번들 툴체인 경로가 PATH 앞에 추가되므로, 로컬 터미널에서 cargo · cmake ·
gcc 를 바로 입력할 수 있습니다.
이 설정은 로컬 터미널에만 도움이 됩니다. 컨테이너 셸과 WSL 셸은 그 환경 자신의
PATH를 쓰고, SSH 셸에는 아예 적용되지 않습니다. 원격에서 쓰는 빌드 도구는 따로 배포되며 17.6에서 다룹니다.
16.4 Markdown 문서 에디터
16.4.1 편집과 미리보기
doc 폴더의 .md / .markdown 파일을 열면 편집기와 실시간 미리보기가 좌우로 열립니다. 툴바에서
굵게 · 기울임 · 취소선 · 제목 · 인라인 코드 · 목록을 넣고, 오른쪽 버튼 세 개로 보기 모드를 바꿉니다
(편집기만 / 분할 / 미리보기만).

세 가지 보기 모드 중 가운데 분할 보기입니다. 왼쪽에 적은 표와 인라인 코드가 오른쪽에 그대로
렌더링되어 있고, ```mermaid 코드 블록은 흐름도로 그려졌습니다 — 다이어그램은 16.4.2에서 다룹니다.
| 단축키 | 동작 |
|---|---|
Ctrl+S | 저장 (이름 없는 문서면 저장 대화상자가 열립니다) |
Ctrl+T | 이름 없는 Markdown 문서를 새 탭으로 |
Ctrl+O | 파일을 골라 새 탭으로 |
툴바 툴팁의
Ctrl+B/Ctrl+I는 이 편집기에서 동작하지 않습니다. 굵게·기울임은 툴바 버튼으로만 적용됩니다. 실제로 동작하는 키는 위 표의 세 가지뿐입니다.
두 창 사이 경계를 드래그해 비율을 바꿉니다. 스크롤은 분할 보기에서만 양방향으로 동기화됩니다. 상대 경로 이미지는 문서가 있는 폴더를 기준으로 표시됩니다.
16.4.2 다이어그램
코드 블록의 언어를 아래 이름으로 지정하면 미리보기에 그림으로 그려집니다. 네 종류 모두 항상 켜져
있으며 끄는 설정은 없습니다. 코드 블록 안에서 @ 나 < 를 입력하면 자동 완성이 나타납니다.
| 언어 | 도구 |
|---|---|
mermaid | Mermaid (내장) |
drawio | Draw.io (내장) |
zenuml | ZenUML (내장) |
plantuml | PlantUML — 인터넷 연결 필요 |
PlantUML만 외부 서버로 그리므로, 실패하면 그 자리에 PlantUML Load Error 또는
PlantUML Network Error 가 표시됩니다. 한 도구가 실패해도 나머지는 계속 그려집니다.
16.5 그 밖의 뷰어와 편집기
| 파일 | 열리는 편집기 | 주요 기능 |
|---|---|---|
.md, .markdown (doc 안) | Markdown 에디터 | 16.4 |
.html, .htm (doc 안) | HTML 미리보기 | Back · Forward · Reload |
.png .jpg .jpeg .gif .svg .webp .bmp | 이미지 뷰어 | Ctrl+휠 확대·축소(0.1~10배), 맞춤 보기 |
.txt | 텍스트 에디터 | Ctrl+S 저장 |
.arxml, .xml, 그 밖 전부 | XML 에디터 | 05. 화면 구성과 조작 참고 |