# Neovim + LazyVim 사용 가이드 **날짜**: 2026-02-21 **대상**: DevOps/SRE 워크플로우 (YAML, Bash, Dockerfile, Terraform, JSON) --- ## 1. 기본 개념 LazyVim은 Neovim 위에 올라가는 배포판이다. Leader key는 ``이며, 거의 모든 기능이 `` + 후속 키로 시작한다. **모르겠으면 ``만 누르면 된다** — which-key가 가능한 키 목록을 팝업으로 보여준다. ### Vim 모드 요약 | 모드 | 진입 | 용도 | |---|---|---| | Normal | `Esc` | 탐색, 명령 실행 (기본 상태) | | Insert | `i`, `a`, `o` | 텍스트 입력 | | Visual | `v`, `V`, `Ctrl-v` | 텍스트 선택 | | Command | `:` | Ex 명령 실행 | --- ## 2. 파일 열기/닫기 ``` nvim # LazyVim 대시보드로 시작 nvim file.yaml # 특정 파일 열기 nvim dir/ # 디렉토리 열기 (neo-tree) ``` ### nvim 안에서 | 키 | 동작 | |---|---| | `ff` | 파일 이름으로 검색 (picker) | | `fr` | 최근 열었던 파일 | | `fg` | 파일 내용 검색 (live grep, ripgrep 사용) | | `fb` | 열린 버퍼 목록 | | `e` | 파일 탐색기 토글 (neo-tree 사이드바) | | `E` | 파일 탐색기 (루트 디렉토리) | ### 버퍼 (탭) 관리 | 키 | 동작 | |---|---| | `` (Shift+h) | 이전 버퍼 | | `` (Shift+l) | 다음 버퍼 | | `bd` | 현재 버퍼 닫기 | | `bo` | 다른 버퍼 전부 닫기 | | `bb` | 버퍼 전환 (picker) | ### 저장/종료 | 키 | 동작 | |---|---| | `:w` | 저장 | | `:q` | 닫기 | | `:wq` 또는 `ZZ` | 저장 후 닫기 | | `:qa` | 전체 종료 | | `qq` | 전체 종료 (LazyVim) | --- ## 3. 편집 — 자주 쓰는 조작 ### 이동 | 키 | 동작 | |---|---| | `h/j/k/l` | 좌/하/상/우 (화살표 대신) | | `w` / `b` | 단어 앞으로/뒤로 | | `0` / `$` | 줄 처음/끝 | | `gg` / `G` | 파일 처음/끝 | | `{` / `}` | 빈 줄 단위로 이동 (문단) | | `Ctrl-d` / `Ctrl-u` | 반 페이지 아래/위 | | `:<숫자>` | 특정 줄로 이동 (예: `:42`) | ### 편집 | 키 | 동작 | |---|---| | `i` | 커서 앞에 입력 시작 | | `a` | 커서 뒤에 입력 시작 | | `o` / `O` | 아래/위에 새 줄 만들고 입력 | | `dd` | 줄 삭제 (잘라내기) | | `yy` | 줄 복사 | | `p` / `P` | 아래/위에 붙여넣기 | | `u` | 되돌리기 (undo) | | `Ctrl-r` | 다시 하기 (redo) | | `ciw` | 단어 하나 교체 (change inner word) | | `ci"` | 따옴표 안의 내용 교체 | | `di{` | 중괄호 안의 내용 삭제 | | `.` | 마지막 동작 반복 | ### 선택 (Visual 모드) | 키 | 동작 | |---|---| | `v` | 문자 단위 선택 시작 | | `V` | 줄 단위 선택 시작 | | `Ctrl-v` | 블록(직사각형) 선택 | | 선택 후 `d` | 삭제 | | 선택 후 `y` | 복사 | | 선택 후 `>` / `<` | 들여쓰기/내어쓰기 | --- ## 4. 검색과 바꾸기 ### 파일 내 검색 | 키 | 동작 | |---|---| | `/패턴` | 아래로 검색 | | `?패턴` | 위로 검색 | | `n` / `N` | 다음/이전 결과 | | `*` | 커서 위 단어 검색 | | `ur` | 검색 하이라이트 끄기 | ### 파일 내 바꾸기 ```vim :%s/old/new/g " 파일 전체에서 old → new :%s/old/new/gc " 하나씩 확인하며 바꾸기 :10,20s/old/new/g " 10~20줄에서만 바꾸기 ``` ### 프로젝트 전체 검색/바꾸기 | 키 | 동작 | |---|---| | `fg` | 프로젝트 전체 내용 검색 (live grep) | | `sw` | 커서 위 단어로 프로젝트 검색 | | `sr` | 검색 & 바꾸기 (grug-far) | --- ## 5. Flash — 화면 내 빠른 점프 LazyVim에는 flash.nvim이 포함되어 있다. 화면에 보이는 아무 위치로 2~3키로 점프. | 키 | 동작 | |---|---| | `s` + 문자 2개 | 해당 위치로 점프 | | `S` | treesitter 기반 선택 (코드 블록 단위) | 예시: `sya` → 화면에서 "ya"로 시작하는 위치에 라벨이 표시되고, 라벨 키를 누르면 점프. --- ## 6. 윈도우 분할 | 키 | 동작 | |---|---| | `-` | 수평 분할 | | `\|` | 수직 분할 | | `` | 분할 창 사이 이동 | | `wd` | 현재 창 닫기 | | `wm` | 현재 창 최대화 토글 | --- ## 7. LSP — 코드 지능 첫 실행 시 Mason이 자동으로 LSP 서버를 설치한다. `:Mason`으로 상태 확인 가능. ### 코드 탐색 | 키 | 동작 | |---|---| | `K` | 커서 위 심볼의 문서/설명 (hover) | | `gd` | 정의로 이동 (go to definition) | | `gr` | 참조 목록 (references) | | `gI` | 구현으로 이동 (implementation) | ### 진단 (에러/경고) | 키 | 동작 | |---|---| | `]d` / `[d` | 다음/이전 진단으로 이동 | | `cd` | 줄 진단 상세 보기 | | `xx` | Trouble 진단 패널 토글 | ### 코드 액션 | 키 | 동작 | |---|---| | `ca` | 코드 액션 (자동 수정 제안) | | `cr` | 이름 바꾸기 (rename) | | `cf` | 포맷팅 | --- ## 8. Git 연동 gitsigns.nvim이 변경 사항을 줄 옆에 표시한다. | 키 | 동작 | |---|---| | `]h` / `[h` | 다음/이전 변경 hunk로 이동 | | `ghs` | hunk 스테이지 (git add 부분) | | `ghr` | hunk 되돌리기 | | `ghp` | hunk 미리보기 (diff) | | `gb` | git blame (줄별 커밋 정보) | LazyGit 연동 (`gg`)은 lazygit이 설치되어 있어야 동작한다: ```bash sudo apt install lazygit # 또는 go install ``` --- ## 9. 플러그인 관리 | 키/명령 | 동작 | |---|---| | `l` | Lazy 플러그인 매니저 열기 | | `:Lazy sync` | 플러그인 업데이트 | | `:Lazy health` | 플러그인 상태 점검 | | `:Mason` | LSP/포매터/린터 서버 관리 | | `:TSUpdate` | treesitter 파서 업데이트 | | `:checkhealth` | 전체 환경 건강 진단 | --- ## 10. DevOps 실전 워크플로우 ### YAML 편집 (Kubernetes manifest, docker-compose 등) 1. `nvim deployment.yaml` — yamlls가 자동으로 스키마 감지 2. 자동완성: Insert 모드에서 타이핑하면 blink.cmp가 제안 표시 - `Tab` / `Shift-Tab` — 제안 선택 - `Enter` — 확정 3. `K` — 현재 필드 설명 (hover) 4. 에러 발생 시 줄 왼쪽에 빨간 표시 → `cd`로 상세 확인 ### Dockerfile 편집 1. `nvim Dockerfile` — dockerfile-ls 자동 활성 2. `FROM`, `RUN` 등 키워드 자동완성 3. 빌드 스테이지 간 이동: `/FROM` + `n` ### Terraform (.tf) 편집 1. `nvim main.tf` — terraform-ls 자동 활성 2. `gd` — 리소스/변수 정의로 점프 3. `cf` — `terraform fmt` 자동 적용 ### Bash 스크립트 1. `nvim script.sh` — bashls 자동 활성 2. ShellCheck 진단이 자동으로 줄 옆에 표시 --- ## 11. 유용한 Ex 명령 ```vim :e filename " 파일 열기 :w filename " 다른 이름으로 저장 :!command " 외부 쉘 명령 실행 (예: :!kubectl get pods) :r !command " 명령 출력을 현재 위치에 삽입 :set wrap / :set nowrap " 줄 바꿈 토글 :noh " 검색 하이라이트 끄기 ``` --- ## 12. 설정 파일 위치 ``` ~/.config/nvim/ ├── init.lua # 진입점 (수정 불필요) ├── lua/ │ ├── config/ │ │ ├── autocmds.lua # 자동 명령 │ │ ├── keymaps.lua # 커스텀 키 매핑 │ │ ├── lazy.lua # lazy.nvim 설정 │ │ └── options.lua # 에디터 옵션 ← 커스터마이징 완료 │ └── plugins/ │ ├── devops-extras.lua # DevOps extras ← 커스터마이징 완료 │ └── example.lua # 예제 (참고용) ``` 플러그인 추가: `lua/plugins/` 안에 `.lua` 파일 만들면 자동 로드. --- ## 빠른 참조 카드 ``` 파일 열기 ff 검색 /패턴 파일 탐색기 e 프로젝트 검색 fg 버퍼 전환 bb 바꾸기 :%s/a/b/g 버퍼 닫기 bd 전체 바꾸기 sr 저장 :w 정의 이동 gd 종료 :q / qq 참조 보기 gr 분할 - / | 문서 보기 K 창 이동 Ctrl-h/j/k/l 코드 액션 ca 되돌리기 u git hunk ]h / [h 다시하기 Ctrl-r 포맷팅 cf ```