Post

[Editor/Vim] Vim g 명령어

Vim의 g 명령어 활용법과 주요 패턴을 핵심 위주로 정리한다.

[Editor/Vim] Vim g 명령어

Vim g 명령어 완전 정리 ⌨️

Vim을 쓰다 보면 g로 시작하는 명령어를 자주 마주친다.
gg로 파일 첫 줄에 가거나, gd로 정의를 찾아가는 것처럼.
이번 글에서는 g 명령어가 왜 존재하는지부터 시작해서 실전에서 쓸 수 있는 명령어들을 정리한다.


🤔 g는 무엇인가?

g는 단독으로는 아무 동작도 하지 않는다.
뒤에 오는 키와 조합되어 의미를 갖는 prefix(접두어) 다.

크게 두 가지 의미로 분류된다.

의미설명예시
Goto특정 위치로 이동gg, gd, gf
Global / Extended기존 명령의 확장 버전gj, gU, g*

1. 🧭 이동 (Motion)

가장 기본적인 g 활용이다.

1
gg      파일의 첫 번째 줄로 이동 (G는 마지막 줄)

wrap된 긴 줄에서의 이동

Vim은 기본적으로 긴 줄을 화면에서 자동으로 wrap(줄바꿈) 한다.
이때 j / kgj / gk의 동작이 달라진다.

1
2
j  / k      논리적 줄 이동 (파일 기준, wrap 무시)
gj / gk     시각적 줄 이동 (화면 기준, wrap 고려)

예시:
한 줄이 너무 길어서 화면에서 3줄로 표시될 때,
j는 그 줄 전체를 한 번에 건너뛴다.
gj는 화면에 보이는 대로 한 줄씩 내려간다.

1
2
3
4
g0      화면상 줄의 맨 앞    (← 0 의 화면 줄 버전)
g^      화면상 줄의 첫 비공백 문자 (← ^ 의 화면 줄 버전)
g$      화면상 줄의 맨 끝    (← $ 의 화면 줄 버전)
gm      화면 가로 중앙으로 이동

💡 0 / ^ / $ vs g0 / g^ / g$ 차이:
0, ^, $논리적 줄(파일 기준) 단위로 동작한다.
g0, g^, g$화면 줄(wrap된 줄) 단위로 동작한다.
wrap이 꺼져 있거나 줄이 화면 폭 안에 들어오면 동작이 동일하다.
wrap된 긴 줄 안에서 이동할 때만 g 버전이 의미를 갖는다.

줄 끝 관련 이동

1
g_      줄의 마지막 비공백 문자로 이동

💡 $ vs g_ 차이:
$는 개행 문자 바로 앞(줄 끝)으로 이동한다.
g_는 마지막 비공백 문자로 이동한다.
줄 끝에 공백이 있을 때 동작이 달라진다.
g_는 화면 줄이 아닌 논리적 줄 기준이다.


2. ✏️ 편집

대소문자 변환

1
2
3
gu{motion}      소문자로 변환
gU{motion}      대문자로 변환
g~{motion}      대소문자 토글

{motion} 자리에는 Vim의 모든 동작을 사용할 수 있다.

명령동작
guiw커서 단어를 소문자로
gUiw커서 단어를 대문자로
g~iw커서 단어 대소문자 토글
guu현재 줄 전체 소문자
gUU현재 줄 전체 대문자
guG커서부터 파일 끝까지 소문자

Insert 위치 제어

1
2
I       줄의 첫 비공백 문자 앞에 Insert
gI      컬럼 1 (줄의 절대적 맨 앞)에 Insert

💡 I vs gI 차이:
들여쓰기된 코드에서 I는 들여쓰기 이후에 커서를 놓는다.
gI는 들여쓰기를 무시하고 컬럼 1에 강제로 Insert한다.
주석 prefix(//, #)를 줄 맨 앞에 붙일 때 유용하다.

텍스트 포맷 (줄바꿈)

textwidth 옵션 기준으로 줄을 자동 정렬한다.

1
2
gq{motion}      줄바꿈 포맷 (커서 위치가 변할 수 있음)
gw{motion}      줄바꿈 포맷 (커서 위치 유지)

긴 주석이나 문단을 정리할 때 유용하다.

줄 합치기

1
2
J       아래 줄과 합치기 (공백 1개 추가)
gJ      아래 줄과 합치기 (공백 없이 그대로)

🔢 숫자 시퀀스 생성

1
2
g<C-a>      Visual 선택 줄마다 숫자 누적 증가
g<C-x>      Visual 선택 줄마다 숫자 누적 감소

사용법 — 1, 2, 3, 4… 자동 생성:

1
2
3
4
1. 첫 줄에 0 입력
2. yy → 9p 로 줄 복사 (총 10줄, 모두 0)
3. V + gg 로 전체 Visual 선택
4. g<C-a> 입력

결과: 각 줄이 1, 2, 3, 4, 5 … 로 변환된다.
(0 기준으로 1행 +1, 2행 +2, 3행 +3 … 누적 증가)

count prefix로 증가 폭 조절 (모든 줄이 0으로 시작할 때):

1
2
2g<C-a>     2씩 증가 → 2, 4, 6, 8 ...
5g<C-a>     5씩 증가 → 5, 10, 15, 20 ...

count를 붙이면 step을 자유롭게 조절할 수 있다.


3. 🔍 검색

완전 일치 vs 부분 일치

1
2
3
4
5
*       커서 단어를 완전 일치(\<word\>)로 앞방향 검색
g*      커서 단어를 부분 일치(word)로 앞방향 검색

#       커서 단어를 완전 일치로 뒷방향 검색
g#      커서 단어를 부분 일치로 뒷방향 검색

예시:
커서가 int 위에 있을 때,
*int만 찾고, g*integer, printf 등도 함께 찾는다.

검색 결과를 Visual로 선택

1
2
gn      다음 검색 결과를 Visual 선택
gN      이전 검색 결과를 Visual 선택

cgn + . 패턴 — 실전 치환 워크플로우

:%s/old/new/gc처럼 전체 치환하는 대신, 하나씩 확인하며 치환할 수 있다.

1
2
3
4
5
6
/foo        "foo" 검색
cgn         다음 "foo"를 Visual 선택 후 바로 수정 모드 진입
bar         "bar"로 입력
<Esc>       완료
n           다음 "foo"로 이동 (건너뛰고 싶으면 n)
.           방금 한 치환을 그대로 반복

n으로 건너뛰고 .으로 적용하는 방식이라
원하는 위치만 선택적으로 치환할 수 있다.
:%s/.../gcc 플래그보다 더 직관적이다.


4. 🎯 정의로 이동

1
2
gd      로컬 변수 정의로 이동 (local declaration)
gD      전역 변수 정의로 이동 (global declaration)

LSP나 ctags 없이도 동작한다.
Vim이 현재 파일 내에서 처음 등장하는 위치를 찾아준다.

💡 C/C++ 코드에서 변수 선언을 빠르게 확인할 때 유용하다.


5. 📂 파일 / URL 열기

1
2
3
4
gf          커서 위치의 텍스트를 파일명으로 인식하여 열기
gF          파일명:줄번호 형식으로 열기
<C-w>gf     새 탭에서 파일 열기
gx          커서 위치의 URL을 기본 브라우저로 열기

gf 예시:
커서가 #include "MyClass.h" 위에 있을 때 gf를 누르면
MyClass.h 파일이 바로 열린다.

gx 예시:
커서가 https://github.com/... 위에 있을 때 gx를 누르면
기본 브라우저로 해당 URL이 열린다.
README나 주석 안의 링크를 빠르게 확인할 때 편하다.


6. 📋 붙여넣기 후 커서 위치

1
2
3
4
5
p       붙여넣기 후 커서가 붙여넣은 텍스트 안에 위치
gp      붙여넣기 후 커서가 붙여넣은 텍스트 바로 다음에 위치

P       커서 앞에 붙여넣기 (커서는 텍스트 안)
gP      커서 앞에 붙여넣기 (커서는 텍스트 다음)

붙여넣은 직후 이어서 입력해야 할 때 gp/gP가 편하다.


7. 🕒 변경 이력 탐색 (changelist)

Vim은 편집한 위치를 changelist로 내부에 기록한다.

1
2
g;      이전 변경 위치로 이동
g,      다음 변경 위치로 이동

파일의 여러 곳을 수정하다가
“아까 수정한 곳이 어디였지?” 싶을 때 g;로 바로 돌아갈 수 있다.


8. 🔧 기타 유용한 명령

1
2
3
4
gi          마지막 Insert 모드였던 위치로 이동 후 Insert 모드 진입
gv          마지막 Visual 선택 영역 재선택
g&          마지막 :s 치환 명령을 전체 파일에 재실행
go          N번째 바이트로 이동 (예: 42go)

🏆 실전 Top 5

실제로 가장 자주 쓰이는 조합이다.

순위명령이유
🥇gdLSP 없이도 변수 정의 탐색
🥈gj / gkwrap 환경에서 자연스러운 커서 이동
🥉gU / gu대소문자 변환이 생각보다 자주 필요
4️⃣cgn + .선택적 치환의 가장 강력한 패턴
5️⃣gf / gx파일·URL 즉시 열기, 헤더 파일 탐색에 유용

📖 전체 목록 확인

1
:help g

Vim 내장 도움말에서 g로 시작하는 전체 명령어 목록을 확인할 수 있다.


참고: :help g (Vim 내장 문서)

This post is copyrighted by the author. All rights reserved.