텍스트 에디터, vim 2

타키탸키·2021년 4월 7일
0

지난 시간에는 vim과 네 가지 모드 중 입력 모드와 명령 모드에 대해 알아봤습니다.

이번 시간에는 명령 모드의 다른 기능을 살펴보고 나머지 두 모드에 대해서 알아보겠습니다.

📄 vim 명령 모드 - 텍스트 검색

명령 모드에서는 텍스트 검색을 할 수 있는데요. 텍스트 검색을 하려면 콜론이 아닌 다른 키를 통해 명령 모드로 가야 합니다. 바로 슬래쉬(/)키입니다. 이처럼 같은 명령 모드로 들어가더라도 어떤 명령어를 사용할 건지에 따라 눌러야 하는 키가 다릅니다.

슬래쉬를 입력하면 명령 모드로 전환 됩니다. 슬래쉬 옆에 찾고 싶은 단어 입력하고 엔터를 치면 맨 윗줄부터 해당 단어를 탐색합니다.

이때, 해당 단어가 있는 다른 줄로 이동하고 싶으면 소문자 n을 누르면 됩니다. 소문자 n아래 방향으로 이동하는데요. 반대로 로 올라가고 싶으면 대문자 N을 입력하면 됩니다.

📄 vim 명령 모드 - 텍스트 치환

텍스트 치환도 해볼까요? 치환바꾼다는 뜻으로, 텍스트 치환을 하면 특정 텍스트를 다른 텍스트로 바꿀 수 있습니다.

텍스트 치환은 콜론을 통해 명령 모드로 진입 한 후, s(substitute)를 누르면 됩니다. 그 다음 슬래쉬를 두 개 적고 그 사이에 바꾸고 싶은 단어를 넣으면 됩니다. 마지막으로 새 단어를 넣고 엔터를 칩니다.

s/바꿀단어/바꾼단어


LOVE였던 두 번째 줄의 동사가 like로 바뀌었습니다.

만약 전체 LOVE를 like로 바꾸고 싶다면 어떻게 해야할까요? s키가 있던 자리 앞에 퍼센트(%)를 넣으면 됩니다. 퍼센트는 범위를 파일 전체로 지정한다는 뜻을 가지고 있습니다.

그럼 모든 LOVE가 like로 바뀐 것 같은데요. 사실 네번째 줄의 LOVE는 변하지 않았습니다. 왜냐하면 해당 커맨드로는 각 줄의 첫번째 단어만 바꿀 수 있기 때문입니다.

우리가 원하던대로 모든 단어를 바꾸려면 옵션을 추가해줘야 합니다. 예시로, 화면의 모든 느낌표를 샵(#)으로 바꿔보겠습니다. 우선, 기존의 커맨드대로 작성한 다음 마지막에 g(global) 옵션을 주면 됩니다. g는 문장에 등장하는 모든 단어를 변경하는 옵션입니다.

:%s/!/#/g

이번에는 두번째에 있는 느낌표까지 전부 샾으로 잘 바뀌었네요.

만약 전부를 바꾸지 않고 원하는 것만 바꾸고 싶을 땐 어떻게 해야 할까요? 그럴 때에는 g 뒤에 c(confirm)이라는 옵션을 주어 사용자에게 바꿀 단어를 확인 받으면 됩니다.

:%s/!/#/gc


그럼 이렇게 첫번째 샾이 활성화되면서 교체할 거냐는 질문이 뜨는데요. 교체를 원하면 y를 누르면 됩니다. 그대로 두고 싶으면 n을 누르면 되구요.

그럼 다음과 같이 일부만 교체된 것을 확인할 수 있습니다.

📄 vim 일반 모드

지금까지 vim의 입력 모드와 명령 모드에 대해 알아봤는데요. 그렇다면 vim의 기본 모드인 일반 모드에서 할 수 있는 작업들에는 어떤 것들이 있을까요?

❗ 커서 이동하기

첫번째는 커서를 이동하는 것입니다. 커서를 이동하는 방법에는 두 가지가 있습니다. 하나는 방향키를 이용하는 방법, 다른 하나는 알파벳 키를 이용하는 방법입니다. 방향키를 이용하는 것은 따로 설명하지 않아도 알 수 있을만큼 쉽습니다.

그럼 알파벳 키를 이용하는 방법을 알아볼 건데요. vim에서 방향키를 대신하는 알파벳 키는 차례대로 h, j, k, l입니다. 실제로도 키보드 우측에 차례대로 나열되어 있죠. 이는 '좌하상우'의 방향을 가지고 있습니다.

여기서 잠깐! 방향키로도 이동이 가능한데 굳이 알파벳 키가 있는 이유는 무엇일까요? 예전 컴퓨터에는 방향키가 존재하지 않았습니다. 따라서, 방향을 설정할 수 있는 알파벳 키가 필요했던 것이죠.

이번에는 커서를 하나씩 이동하는 것이 아니라 한 번에 먼 거리를 이동해봅시다. 이때에는 가고 싶은 거리로 입력하고 방금 배운 알파벳 키에 따라 원하는 방향을 입력하면 됩니다. 예컨대, 오른쪽으로 세 칸 이동하고 싶다면 3l을 누르면 됩니다.

추가로 숫자 0을 누르면 커서가 줄의 첫 번째 칸으로 이동합니다. 반대로, 달러($)를 누르면 커서가 줄의 마지막 칸으로 이동합니다. 또한, 파일의 맨 첫 줄로 가려면 소문자 g를 두번(gg) 입력하면 됩니다. 반대로, 파일의 마지막 줄로 이동하려면 대문자 G를 한 번만 입력하면 됩니다.

vim으로 파일을 빨리 수정하기 위해서는 위와 같은 커서 이동 방법을 잘 익혀두시는 것이 좋습니다.

❗ 텍스트 삭제하기

두번째는 텍스트를 삭제하는 작업입니다. 소문자 x를 누르면 텍스트를 한 칸씩 삭제할 수 있습니다. 세번째 줄의 and를 제거하겠습니다.

and는 세 글자이므로 x를 세번 누르면 됩니다. 이제 입력 모드에서 and 자리에 also를 넣고 다시 일반 모드로 돌아오겠습니다.

이번에는 한꺼번에 여러 글자를 지워볼 건데요. 지우고 싶은 글자 수를 입력하고 x를 누르면 됩니다. 마지막 공백을 포함해서 also를 지우려면 5+x를 하면 되겠죠?

줄 단위 삭제도 가능한데요. 소문자 d를 두 번 누르면 됩니다. 마지막 문장을 통째로 삭제해보겠습니다. 이때, 지우는 기준은 커서의 위치에 달려있습니다.

그럼 여러 줄을 삭제하려면 어떻게 해야할까요? 지우고 싶은 줄의 수와 dd를 누르면 됩니다.

마지막 두 줄을 삭제하기 위해 2+dd를 입력했습니다.

만약 삭제를 했는데 알고 보니 지우면 안 되는 내용이었다면 어떻게 해야 할까요? 흔히 작업을 하던 도중 실수를 하면 ctrl+z를 눌러 복원했었죠? 마찬가지로 유닉스에서는 소문자 u(undo)를 눌러 이전 작업을 취소할 수 있습니다.

마지막 두 문장이 돌아왔습니다. u를 한 번 더 누르면 맨 처음 지웠던 마지막 문장도 다시 돌아옵니다.

📄 vim 비주얼 모드

마지막으로 vim의 비주얼 모드를 배워보겠습니다. 비주얼 모드로 진입하려면 소문자 v(visual)를 누르면 됩니다.

비주얼 모드는 좌측 하단에 --VISUAL--이라는 문구가 뜹니다.

비주얼 모드에서는 원하는 영역만큼 텍스트를 블록 지정할 수 있는데요. 커서가 있는 위치에서 방향키를 누르면,

위와 같이 블록 지정이 됩니다. 블록 지정을 한 상태로 다른 작업을 할 수 있습니다. 첫번째는 텍스트 삭제, 두번째는 복사/붙여넣기, 세번째는 잘라내기입니다.

먼저, 삭제를 해보겠습니다. 일반 모드와 마찬가지로 x를 누르면 됩니다. 차이가 있다면 한 칸씩 지워지는 것이 아닌, 블록이 지정된만큼 지워집니다.

작업을 실행하고 나면 자동으로 일반 모드가 됩니다. u키를 눌러 내용을 복원한 다음 복사를 해보겠습니다. 복사소문자 y(yank)를 입력하면 됩니다. 참고로 yank는 우리말로 복사하다, 잡아당기다라는 뜻을 가지고 있습니다.

y를 누르니 블록한 영역이 복사되었다는 문구가 나옵니다. 삭제와 마찬가지로 복사도 완료되면 자동으로 입력 모드가 됩니다. 따라서, 붙여넣기를 하기 위해 다시 v를 눌러 비주얼 모드에 진입합니다.

붙여넣기는 소문자 p나 대문자 P를 누르면 되는데요. 이때, 소문자 p를 누르면 커서 다음 칸에 붙여넣고 대문자 P를 누르면 커서 이전 칸에 붙여넣습니다.

소문자 p를 한 결과입니다. 기존 커서가 #에 있었기 때문에 그 뒤에 내용이 입력되었습니다.

대문자 P를 한 결과입니다. 기존 커서가 있던 # 자리에 복사된 내용이 들어가면서 #의 위치가 맨 아랫줄로 바뀌었습니다.

소문자 v를 누르면 비주얼 모드로 들어가면서 한 글자씩 블록 지정이 되는데요. 대문자 V를 누르면 줄 단위로 블록 지정이 가능합니다.

일반 모드에서 대문자 V를 누르자 맨 첫 줄이 블록 지정된 상태로 비주얼 모드에 진입했습니다. 방향키를 위아래로 움직이면 마찬가지로 줄 단위로 블록이 지정됩니다. 한 줄씩 블록 지정을 하면 복사/붙여넣기 또한 줄 단위로 이루어집니다.


소문자 p를 누르면 이번에는 # 아래 줄에 문장이 추가됩니다.

대문자 P를 누르면 #이 있는 문장이 아랫줄로 밀리고 그 위로 복사된 문장이 추가됩니다.

마지막으로 잘라내기를 보여 드리겠습니다. 일반적인 잘라내기와 달리 유닉스에서의 잘라내기는 삭제한 내용이 잠시 저장되어 있어 그 내용을 불러오는 원리입니다. 따라서, 블록 지정 후 d를 눌러 내용을 삭제하고 붙여넣기를 하면 잘라내기와 같은 작업을 합니다.

맨 윗 줄에 있던 I WANT TO LEARN DATA SCIENCE. 문장이 맨 아래로 내려왔습니다. 이처럼 위치를 옮기고 싶은 문장이 있으면 잘라내기 기능을 활용하면 됩니다. 이때, 기존 문장이 남아 있는 복사/붙여넣기와는 달리 잘라내기는 기존 문장을 지운다는 사실을 잊지 마세요.

📄 vim 정리

지금까지 vim의 네 가지 모드와 각 모드에서 할 수 있는 작업, 그리고 그 커맨드를 배웠습니다. 사실 vim에서는 지금까지 배운 내용보다 더 많은 작업을 할 수 있습니다. 하지만 그 모든 작업들을 암기하긴 쉽지 않겠죠. 따라서, 자주 쓰는 기능들만 익히고 나머지는 필요에 따라 검색해서 활용해보는 것이 좋습니다.

만약 더 많은 vim 기능이 궁금하다면 아래 링크들을 확인해보세요.

❗ 사용 모드 전환

❗ 일반 모드(Normal Mode)

❗ 입력 모드(Insert Mode)

❗ 명령 모드(Command Mode)

❗ 비주얼 모드(Visual Mode)


이번 시간에는 vim의 네 가지 모드 중, 명령 모드와 일반 모드, 비주얼 모드에 대해 알아봤습니다. 커맨드가 많은 만큼 암기보다는 실습을 통해 익히는 연습이 필요할 것 같습니다.

다음 시간에는 유닉스를 통해 외부 프로그램을 설치하는 방법에 대해 함께 알아보겠습니다.

* 이 자료는 CODEIT의 '유닉스 커맨드 라인' 강의를 기반으로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글