Vim 정리

chezze·2023년 5월 4일
0

Linux

목록 보기
3/3
post-thumbnail

Vim는 CLI(Command Line Interface) 환경에서 동작하는 텍스트 에디터이다.
우리가 윈도우에서 사용하던 메모장은 GUI(Graphic User Interface) 기반의 텍스트 에디터이다.

우분투 22.04 LTS를 설치한 뒤 한글 설정을 한 뒤 거의 처음으로 시작하는 리눅스 공부이다!! 😆

먼저 실습을 진행할 디렉토리를 mkdir 명령어를 이용해 생성하고, 해당 디렉토리로 이동하자.

이제, 텍스트 파일을 생성해보자. 텍스트 파일 생성은 다음과 같이 할 수 있다.

vi [FILENAME]
# vi와 vim은 다르지만, 요즘 대부분의 UNIX와 LINUX 배포판에서는 터미널에 vi를 입력하면
# vim의 vi 호환모드가 나타나게 설계되어 있다.

필자는 test.txt라는 텍스트 파일을 생성하였다.
그러면 이렇게 새 텍스트 파일이 생기게 된다.

vi에는 mode가 존재한다. 총 4가지의 mode가 있으며, 각각의 모드는 다음과 같다.

  1. Normal Mode
    처음 실행한 상태. 모드 변환 시 항상 이 Normal Mode를 거쳐야 한다.
  2. Insert Mode
    I, i, A, a, O, o를 누르면 진입하는 모드로, 해당 모드에서 입력이 가능하다.
  3. Command Mode
    Normal Mode에서 :을 입력한 상태. 하단에 명령을 입력할 수 있다.
  4. Visual Mode
    V 또는 Ctrl+V를 눌러서 블록 선택을 할 수 있는 상태.

mode에 대하여 알아보았으니, 다음은 vi에서 사용하는 명령어를 정리해 보자.


vi 관련 명령어

vi 파일 생성

빈 파일을 생성하고 싶으면, 명령어 vi를 입력하면 된다.

vi

그러면 vi 에디터가 열리고, 이렇게 생성한 파일은 Command Mode에서 파일명을 정할 수 있다.

이 방법 이외에도, 앞에서 test.txt를 생성한 것처럼 vi 파일을 생성하거나 열 수 있다.

vi [FILENAME]

입력된 이름을 가진 텍스트 파일이 존재하지 않으면 해당 이름의 파일을 생성하고, 존재하면 파일을 연다.


vi 파일 저장 및 종료

내용 편집 후 vi 파일을 저장하거나 종료하기 위해서는 Command Mode로 변환하여 명령어를 입력해야 한다.

:q   작업 내용이 없을 때 종료
:q!   저장하지 않고 강제로 종료
:w   저장
:w [FILENAME]   저장 후 파일 이름 지정
:wq   저장 후 종료
:wq!   저장 후 강제 종료
:wq [FILENAME]   저장 후 파일 이름 지정 뒤 종료
ZZ   저장 후 종료 ( = :wq )

※ vi 에디터에서는 비정상 종료 시 .swp 파일이 생성되므로, 필요하지 않으면 삭제하자.

Nomal Mode → Insert Mode

i   현재 커서 위치 앞에 입력
a   현재 커서 위치 뒤에 입력
o   현재 커서 다음 행에 입력
I   커서가 위치한 행의 첫 컬럼으로 이동하여 입력
A   커서가 위치한 행의 마지막 컬럼으로 이동하여 입력
O   현재 커서 이전 행에 입력

이중 ia를 가장 많이 사용하니 알아두자!

Insert Mode → Nomal Mode

ESC   Nomal Mode로 모드 변환

vi 커서 이동: 한 칸씩 이동

기본적으로 화살표를 사용하여 이동 가능하지만 h, j, k, l를 화살표 대신 사용할 수 있다.
( 화살표 대신 h, j, k, l를 사용하도록 연습하자!! )
< Nomal Mode에서 사용 가능 >

, h   왼쪽으로 한 칸 이동
, j   아래로 한 칸 이동
, k   위로 한 칸 이동
, l   오른쪽으로 한 칸 이동

vi 커서 이동: 빠른 이동

한 칸씩이 아닌 단어를 기준으로, 줄을 기준, 혹은 문서를 기준으로 이동하는 것도 가능하다.
< Nomal Mode에서 사용 가능 >

w   다음 단어의 첫 칸으로 이동
b   이전 단어의 첫 칸으로 이동
^, 0   현재 줄의 첫 칸으로 이동
$   현재 줄의 마지막 칸으로 이동
:[NUMBER]   NUMBER 번째 줄 첫 칸으로 이동 (예 :7 7번째 줄 첫 칸으로 이동)
gg   문서 첫 줄의 첫 칸으로 이동
G   문서 마지막 줄의 첫 칸으로 이동

:[INDEX]는 예외로 Command Mode에서 사용한다.

내용 삭제

삭제된 내용은 buffer에 저장되어 붙여넣기가 가능하다. (잘라내기라고 보아도 무방)
< Nomal Mode에서 사용 가능 >

x   현재 커서의 앞 글자 삭제
[NUMBER]x   커서 위치를 포함해서, NUMBER 글자만큼 삭제
X   현재 커서의 글자 삭제
dw   커서를 기준으로 뒤에 있는 단어 글자 삭제 (커서 포함)
[NUMBER]dw   커서를 기준으로 뒤에 있는 단어 NUMBER개 삭제 (커서 포함)
db   커서를 기준으로 앞에 있는 단어 글자 삭제 (커서 미포함)
[NUMBER]db   커서를 기준으로 앞에 있는 단어 NUMBER개 삭제 (커서 미포함)
dd   현재 줄 삭제
[NUMBER]dd   현재 줄부터 NUMBER 줄만큼 삭제(현재 줄 포함)
D   현재 커서의 글자부터 현재 줄의 마지막까지 삭제

※ 커서 기준이란??
예를 들어 I wanna be a linux programmer 이라는 문장에서, 커서가 linux의 n에 있다고 하자.

이 상태에서 명령어 dw를 사용하게 되면 n을 포함한 커서 뒤의 단어 nux가 사라지게 된다.
그 결과 문장은 I wanna be a liprogrammer가 될 것이고, 커서는 p의 자리에 위치하게 될 것이다.

같은 방식으로, 앞의 예제에서 db를 사용하게 되면 n을 제외한 커서 앞의 단어 li가 사라지게 된다.
그 결과 문장은 I wanna be a nux programmer가 될 것이고, 커서는 그대로 n의 자리에 위치한다.

내용 복사 및 붙여넣기

같은 텍스트를 여러 번 입력해야 할 때, 복사 및 붙여넣기를 이용하면 편리하다.
< Nomal Mode에서 사용 가능 >

복사

yy   현재 줄을 복사
[NUMBER]yy   현재 위치부터 NUMBER 개의 줄을 복사
yw   커서를 기준으로 뒤에 있는 단어 복사 (커서 포함)
[NUMBER]yw   커서를 기준으로 뒤에 있는 단어 NUMBER 개 복사 (커서 포함)
yb   커서를 기준으로 앞에 있는 단어 복사 (커서 미포함)
[NUMBER]yb   커서를 기준으로 앞에 있는 단어 NUMBER 개 복사 (커서 미포함)

붙여넣기

p   현재 커서의 글자 삭제
P   현재 줄부터 NUMBER 줄만큼 삭제(현재 줄 포함)

내용 검색

< Nomal Mode에서 사용 가능 >

/[String]   문서의 앞에서부터 해당 문자열을 검색
?[String]   문서의 뒤에서부터 해당 문자열을 검색
n   다음 검색
N   이전 검색

내용 치환

:%s/oldString/newString   각 행의 첫 oldString을 NewString으로 치환
:%s/oldString/newString/g   문서의 모든 oldString을 NewString으로 치환
:%s/oldString/newString/gc   문서의 모든 oldString을 사용자에게 하나씩 확인해가며 NewString으로 치환

vi 명령 취소 및 재실행

윈도우에서 Ctrl+Z로 명령을 취소하는 것처럼, Vim에서도 명령을 취소할 수 있는 커맨드가 존재한다.

u   명령 취소
U   현재 줄의 모든 명령 취소

vi 인덱스 나타내기/숨기기

< Command Mode에서 사용 가능 >

:set nu   행 인덱스 나타내기
:set nonu   행 인덱스 숨기기


Undo가 안된다면?

실습 중에 undo 명령을 위해 u 키워드를 입력하였는데, 한 번은 undo가 잘 되었지만 연속으로 undo를 하게 되면 undo 명령을 다시 undo하여 결과적으로 redo하는 현상이 발생하였다.
그 이유에 대하여 구글링도 해보고 열심히 찾아보았지만 찾을 수 없었다..
그러다 help 명령어를 입력하였더니 내가 사용하고 있던 게 vim-tiny였다고 한다 😅

혹시 ubuntu를 처음 깔아 바로 vi를 실습하였다면 자신이 사용하고 있는 게 vim-tiny인지 확인해보도록 하자!

필자는 다음 명령을 터미널에서 실행하여 vim-tiny를 삭제하였다.

sudo apt-get remove vim-tiny

이후, vim 설치를 위하여 다음 명령을 실행하였다.

sudo apt-get install vim

그랬더니.. undo가 정상적으로 실행된다!!! 😆

profile
주니어 컴공학부생🌱

0개의 댓글