짐살라빔짐짐살라빔짐짐살라빔짐지~임
Vi Improved의 약자로, Vi라는 터미널용 텍스트 에디터가 있었는데 그것의 진화 버전입니다.
Vim을 자유자재로 다룰 줄 안다면 다음과 같은 이점이 있습니다.
마우스에 손 안대고 코딩 가능 -> 속도 향상으로 이어짐 -> 고인물 소리 듣기 쌉가능 -> 구글 입사 -> 멋진 개발자가 되어 슈퍼스타와 연애 -> 외계인 지구 침공 시 Vim으로 무찌를 수 있음
흠흠... 아무튼 힙스터 느낌이 난다 이거야.
제가 사용해왔던 실전적인 명령어 위주로 정리, 또 새롭게 알게되는 명령어도 추가할 예정입니다.
명령 모드는 커서가 뚱뚱한 상태를 말하고, 입력 모드는 커서가 얇은 상태를 말합니다.
명령 모드에서는 명령어를 입력하고,
입력 모드에서는 텍스트를 입력합니다.
명령 모드에서 아무렇게나 텍스트를 치면 아무것도 입력되지 않고, 운 나쁘면 명령어가 눌려 예상치 못한 방향으로 동작합니다. (심심하신 분들은:q!
를 눌러보아요)
그럼 입력 모드에는 어떻게 접근을 할까요? 대표적으로 4가지를 많이 사용합니다.
i
: 커서 앞쪽에 입력 시작I
: 행 맨 앞에 입력 시작a
: 커서 뒤쪽에 입력 시작A
: 행 맨 뒤에 입력 시작
입력을 마친 후, esc
키를 누르면 다시 명령 모드로 돌아갑니다.
자, 명령 모드와 입력 모드를 변환할 수 있게 되었습니다. 하지만 어디에 입력하고 싶은지 정할 때 마우스로 클릭하면 너무 추하겠죠? 명령 모드에서 뚱뚱이 커서를 키보드만으로 움직일 수 있습니다!
hjkl
)
h
: 커서 왼쪽으로 이동j
: 커서 아래쪽으로 이동k
: 커서 위쪽으로 이동l
: 커서 오른쪽으로 이동
간혹 키보드의 h
, j
, k
, l
키들을 차례대로 검지 중지 약지 소지 놓아서 쓰는 사람들이 있는데, 저는 그냥 타자 치듯이 j
에 검지 놓고 써요. 그게 더 편한 것 같아서..
0
: 행 맨 앞으로 이동$
: 행 맨 뒤로 이동
얘네들은 잘 안쓰는 명령어이기는 한데, 행 맨 앞과 맨 뒤로 이동할 수 있는 명령어입니다.
I
와 A
의 차이점은 명령어를 입력한 후 입력 모드로 전환되느냐 마느냐 이겠죠?
w
: 다음 단어로 이동b
: 이전 단어로 이동
여기에 숫자를 앞에 붙이면 여러 단어를 한번에 이동할 수도 있습니당.
3w
: 다음 단어로 3번 이동4b
: 이전 단어로 4번 이동
H
: 화면 윗 부분으로 이동M
: 화면 중간 부분으로 이동L
: 화면 아랫 부분으로 이동
gg
: 파일 맨 앞으로 이동G
: 파일 맨 뒤로 이동
G
명령어 앞에 숫자를 붙이면 파일 내 특정 행으로 이동할 수 있습니다.
17G
: 파일 내 17번째 행으로 이동
마우스 스크롤? 너무 하남자임. 상특: 다음과 같은 명령어를 사용합니다.
ctrl
+u
: 위쪽으로 스크롤 이동ctrl
+d
: 아래쪽으로 스크롤 이동
이건 잘 안쓰긴 하는데... 문단 단위로 이동할 수도 있습니다.
{
: 위로 올라가 찾은 문단 시작으로 이동}
: 아래로 내려가 찾은 문단 끝으로 이동
명령 모드(뚱뚱이 커서 상태)에서도 텍스트를 수정할 수 있는 명령어가 있습니다. (대박대박)
x
: 뚱뚱이 커서 아래 글자 삭제
dd
: 커서가 있는 행 삭제
yy
: 커서가 있는 행 복사p
: 커서가 있는 행 아래에 붙여넣기
그런데, 클립보드에 있는 내용을 붙여넣기 하고 싶을 때도 있습니다. 아 Vim에서 복사된 내용과 클립보드에 복사된 내용은 별개이기 때문에, ctrl
+c
를 눌러 클립보드에 복사된 내용은 Vim에서 ctrl
+v
, 또는 p
를 눌러도 붙여넣어지지 않습니다. 오또카지? 다음 명령어를 사용하면 됩니다.
*p
: 클립보드에 있는 내용을 커서가 있는 행 아래에 붙여넣기
ctrl
+z
하고 시퍼Vim은 이전 상태를 자동으로 추적하는 기능이 있습니다. 이는 이전 명령 반복, undo+redo를 가능하게 합니다.
.
: 이전 명령과 똑같은 명령어 입력
u
: undo, 되감기ctrl
+r
: redo, 앞감기
Vim의 강력함은 명령어와 대상의 합성으로 만들 수 있는 명령어가 엄청 많다는 점에서 나옵니다. 이 조합은 너무나도 무궁무진해서, 아직까지도 특이점에 도달하지 못했다는 말이 있을 정도... 그니까 명령어와 대상만 잘 조합하면 키보드만으로 안되는게 없다는 거임 ㅇㅇ
d
: delete (cut), 대상 삭제 및 잘라내기y
: yank (copy), 대상 복사c
: change, 대상 지우고 입력 시작v
: visual, 대상 선택
d
는 삭제 및 잘라내기이므로, d
명령어 수행 이후 p
를 누르면 해당 대상이 붙여넣기 됩니다.
3w
: 앞으로 3개의 단어3b
: 뒤로 3개의 단어
aw
: 한 단어at
: 한 태그 (태그 전체)as
: 한 문장 (문장 전체)ap
: 한 문단 (문단 전체)a(
: 한 () (()를 포함한 전체)a{
: 한 {} ({}를 포함한 전체)a"
: 한 "" (""를 포함한 전체)
it
: 태그 안의 내용i"
: "" 안의 내용i(
: () 안의 내용i{
: {} 안의 내용ip
: 문단 안의 내용
1k
위로 한 행2k
위로 2개의 행1j
밑으로 한 행2j
밑으로 2개의 행
daw
: 한 단어 삭제 및 잘라내기d3w
: 앞으로 3개의 단어 삭제 및 잘라내기d2k
: 위로 2개의 행 삭제 및 잘라내기d2j
: 밑으로 2개의 행 삭제 및 잘라내기di{
: {} 안의 내용 삭제 및 잘라내기di(
: () 안의 내용 삭제 및 잘라내기d2j
: 밑으로 2개의 행 삭제 및 잘라내기da(
: 한 () (()를 포함한 전체) 삭제 및 잘라내기di'
: '' 안의 내용 삭제 및 잘라내기
ci[
: [] 안의 내용 지우고 입력 시작
f{
: { 까지의 부분 ({ 포함)t{
: { 까지의 부분 ({ 미포함)
근데 해당 명령어는 실수할 여지가 약간 있습니다. 따라서 비주얼적으로 확인하며 해당 대상이 맞는지 체크할 수도 있습니다.
/hidd
: hidd로 시작하는 부분을 강조해서 보여줌,enter
입력 시 명령 수행
df{
: { 까지의 부분 ({ 포함) 삭제 및 잘라내기dt{
: { 까지의 부분 ({ 미포함) 삭제 및 잘라내기d/hidd
: hidd로 시작하는 부분까지의 부분 삭제 및 잘라내기
/project
: project 정방향 검색?project
: project 역방향 검색n
: 다음 단어
v
: wrapping selection, 대상 선택
v
를 누르면 비주얼 모드에 진입할 수 있습니다. 커서로 드래그해서 blocking하는 것입니다.
여기까지는 잘 아는데.. 밑에 내용은 잘 안 알려진 것 같습니다.
ctrl
+v
: box selection, 박스 형태로 대상 선택
vertical box를 선택한 뒤 여기에 입력을 하고 싶다면?
I
를 눌러 입력 모드로 진입할 수 있습니다. (ㄹㅇ개꿀임)
Vim 관련 내용을 정리해보았습니다. Vim을 멋지게 사용해서 모두 힙스터 개발자하시길 바라며... 다음에 또 빔~