이 글은 Neovim 시리즈의 두 번째 글이다.
- Neovim 입문: Vim을 넘어서는 첫걸음
- Neovim 중급: 생산성을 높이는 기능들 ← 현재 글
- Neovim 고급: 플러그인과 LSP로 IDE처럼 쓰기
- 나의 Neovim 설정 전체 공개
텍스트 오브젝트
Vim의 진짜 힘은 동사 + 대상 조합이다. 텍스트 오브젝트는 “대상"에 해당한다.
문법
{동사}{범위}{대상}
- 동사:
d(삭제),c(변경),y(복사),v(선택) - 범위:
i(inner, 안쪽),a(around, 바깥 포함) - 대상:
w(단어),",',),},],t(태그) 등
실전 예시
커서가 단어 중간에 있을 때:
| 명령 | 동작 |
|---|---|
ciw | 단어를 지우고 입력 모드 (Change Inner Word) |
diw | 단어 삭제 |
yiw | 단어 복사 |
따옴표 안에 커서가 있을 때:
| 명령 | 동작 |
|---|---|
ci" | 따옴표 안의 내용을 지우고 입력 |
di" | 따옴표 안의 내용 삭제 |
da" | 따옴표까지 포함해서 삭제 |
괄호 안에 커서가 있을 때:
| 명령 | 동작 |
|---|---|
ci( | 괄호 안 내용을 변경 |
da{ | 중괄호를 포함해서 삭제 |
vi[ | 대괄호 안 내용을 선택 |
i vs a의 차이
print("hello world")
커서가 hello 위에 있을 때:
di"→print("")(따옴표 안 내용만 삭제)da"→print()(따옴표까지 삭제)
텍스트 오브젝트를 익히면 편집 속도가 비약적으로 올라간다.
버퍼, 윈도우, 탭
버퍼
파일을 열면 버퍼에 로드된다. 여러 파일을 동시에 열어둘 수 있다.
:e file1.lua 파일 열기 (새 버퍼)
:ls 열린 버퍼 목록
:bn 다음 버퍼
:bp 이전 버퍼
:bd 버퍼 닫기
:b {숫자} 해당 번호 버퍼로 이동
윈도우 (분할)
화면을 분할해서 여러 버퍼를 동시에 볼 수 있다.
:split 가로 분할 (또는 Ctrl-w s)
:vsplit 세로 분할 (또는 Ctrl-w v)
Ctrl-w h/j/k/l 분할 창 간 이동
Ctrl-w = 분할 창 크기 균등화
:close 현재 창 닫기
탭
여러 윈도우 레이아웃을 탭으로 관리할 수 있다.
:tabnew 새 탭
:tabn 다음 탭 (또는 gt)
:tabp 이전 탭 (또는 gT)
:tabclose 탭 닫기
실무 팁: 버퍼 + 윈도우 분할을 주로 쓰고, 탭은 맥락이 완전히 다른 작업을 분리할 때 쓰면 좋다.
매크로
반복 작업을 녹화해서 재생하는 기능이다.
기본 사용법
q{레지스터}— 녹화 시작 (예:qa)- 원하는 작업 수행
q— 녹화 중지@{레지스터}— 재생 (예:@a)@@— 마지막 매크로 재생{숫자}@a— N번 반복 재생
실전 예시
모든 줄 끝에 세미콜론을 추가하고 싶다면:
qa q 레지스터에 녹화 시작
A; 줄 끝에 ; 추가
Esc Normal 모드로
j 다음 줄로
q 녹화 중지
99@a 99번 반복
레지스터
Vim의 복사/붙여넣기는 레지스터라는 저장소를 사용한다. 클립보드가 여러 개 있는 것과 같다.
주요 레지스터
| 레지스터 | 설명 |
|---|---|
"" | 기본 레지스터 (마지막 yank/delete) |
"0 | yank 전용 레지스터 |
"+ | 시스템 클립보드 |
"a ~ "z | 이름 지정 레지스터 |
"_ | 블랙홀 레지스터 (버리기) |
사용법
"ay a 레지스터에 복사
"ap a 레지스터에서 붙여넣기
"+y 시스템 클립보드에 복사
"+p 시스템 클립보드에서 붙여넣기
"_dd 줄을 삭제하되 레지스터에 저장하지 않음
레지스터 확인: :reg
팁:
dd로 줄을 지우면 기본 레지스터가 덮어씌워진다. 복사한 내용을 유지하려면"0p(yank 레지스터)를 쓰거나, 삭제 시"_dd(블랙홀)를 쓰면 된다.
Marks
특정 위치를 북마크해두고 바로 이동할 수 있다.
ma 현재 위치를 a 마크로 저장
'a a 마크의 줄로 이동
`a a 마크의 정확한 위치로 이동
:marks 모든 마크 목록
- 소문자(
a-z): 파일 내 마크 - 대문자(
A-Z): 파일 간 글로벌 마크
비주얼 블록 모드
Ctrl-v로 사각형 영역을 선택할 수 있다. 여러 줄을 동시에 편집할 때 유용하다.
여러 줄 앞에 텍스트 추가
1. Ctrl-v 블록 선택 시작
2. j/k로 줄 선택
3. I 줄 앞에 입력 모드
4. 텍스트 입력
5. Esc 모든 선택된 줄에 적용
여러 줄 뒤에 텍스트 추가
1. Ctrl-v 블록 선택 시작
2. j/k로 줄 선택
3. $ 줄 끝까지 선택 확장
4. A 줄 뒤에 입력 모드
5. 텍스트 입력
6. Esc 적용
내장 터미널
Neovim 안에서 터미널을 열 수 있다.
:terminal 터미널 열기
터미널에서 Normal 모드로 전환: Ctrl-\ Ctrl-n
나는 내장 터미널 대신
vim-floaterm플러그인을 사용한다.Ctrl-;로 플로팅 터미널을 토글할 수 있어서 더 편하다.
기본 설정 시작하기
Neovim 설정 파일은 ~/.config/nvim/init.lua다. 간단한 설정부터 시작하자:
-- 줄 번호 표시
vim.opt.number = true
vim.opt.relativenumber = true
-- 탭 설정 (2칸)
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
-- 검색 설정
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.incsearch = true
-- 스크롤 여유
vim.opt.scrolloff = 10
-- 마우스 지원
vim.opt.mouse:append("a")
이 정도만 설정해도 기본 Neovim보다 훨씬 쾌적해진다.
다음 글
기본기가 탄탄해졌다면, 플러그인과 LSP를 설정해서 Neovim을 IDE처럼 사용하는 방법을 알아보자.