내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 참고로 저는 WSL2 환경에서 vi를 사용하는 중 입니다.

1) ViI? VIM?
VIM이란 vi_Improved 의 약어로써 VI 에디터에다 편리하면서 막강한 기능들을 추가한 에디터이다.
대부부분의 리눅스 베포판들은 기본에디터로 VIM이 설치되어있으며, VI 명령으로 alias되어있다.
즉 VI를 실행하면 자동적으로 VIM이 실행된다.
그럼 이러한 에디터는 왜 사용하는것 인가? 기존의 GUI환경의 VScode등이 더 편하지 않은가?
1) 키보드만으로 모든것을 해결할수 있다.
처음이 어려워 그렇지 적응하고 사용하다보면 그 효율성이 아주 뛰어난 에디터이며 모든 리눅스에 설치되어있기에 매우 간편하다.
또 마우스가 전혀 필요없기에 노트북하나 만드로도 모든것을 해결할수 있다.
2) 처음에 만들어질 당시까지만 해도 GUI환경이 발달되어 있지 않았다.
이는 그만큼 이 에디터가 오래되었다는 뜻이다. 리눅스 내에서 사용되는 에디터의 랭킹조사결과 vim이 압도적 1위를 하는것 또한 꾸준히 사랑받았다는 증거가 될 것이다.
2) 사용법
◆ 우선 Vim-tiny가 있고 Vim-Basic이 있다.
Tiny 버전은 매우 기본적인 기능만을 제공하기때문에 추가적으로 사용자가 Basic버전을 설치해주어야 한다.

설치후 터미널에 vi 입력시 자신의 버전확인이 가능할 것이다.

◆ 설치후 에디터를 사용하기 위하여 터미널에 $vi filename 형식으로 입력해주면 된다.
필자는 C언어를 주로 쓰기에 C파일을 하나 만들어 보겠다.

입력후 다음화면과 같은 화면으로 이동하게 될 것이다.

여기서 아무리 무엇을 눌러봐도 입력이 되지않는다. 대부분이 여기서 처음 당황한다. 이는 모드에 대하여 알아야한다.
모드전환

vi를 실행시켰을때 가장 먼저 켜지는 화면이다. 각기 다른모드에서 esc키를 누르면 항상 일반모드로 돌아오게 되있다.
2) 입력모드(편집모드)
실질적으로 코드편집을 하는 단계이다. 좌측 하단을 보면 -- INSERT -- 라고 나타나있는경우에 해당된다.

3) 비주얼모드
V나 v키로 접근하며 일반적으로 여러행을 선택할때 주로 사용한다.
이외의 기능은 아직 초보자에게 필요할일이 없을것 이다.
다른블로그에서는 애당초 비주얼모드를 빼고 설명하기도 한다.
4) ex모드
[ : ] 콤마를 누름으로써 모드에 입장할수 있다. 이모드에서는 저장, 종료, 검색, 치환 을 주로사용한다.
이를 요약하면 다음과 같은 흐름으로 수행된다.

다음부터 나올 명령어들은 모두 일반모두상태에서 입력한다.
글을 편집하든 무엇을 하든 ESC로 일반모드로 돌아온후 사용하면 된다.
삽입 명령어
i
|
입력모드 전환. 커서왼에 삽입된다.
|
I
|
커서를 포함하는 행 맨 첫 칸에 삽입
|
a
|
커서의 오른쪽에 삽입
|
A
|
커서를 포함하는 행 마지막 문자 뒤에 추가
|
o
|
커서를 포함하는 행 아래에 추가
|
O
|
커서를 포함하는 행 위에 추가
|
요약하면 다음과 같다

커서 이동
프로그래머들은 보통 게으름으로부터 해방되기 위하여 코드를 짜는 사람들이다. 따라서 타이핑을하다 방향키로 이동하여 움직이는 시간조차 아까울수가 있다. 이를 위해 vim에서는 다른키로 커서의 이동이 가능하다.

위의 키들은 자세히 보면 키보드에 양손을 올려놨을때 오른손의 위치에 해당하는 키 이다. 이처럼 사소한것까지도 모두 키보드로 통제하겠다는 것 이다.
그런대 잠시만? 방향키 또한 키보드를 이용한 통제 아닌가? 라고 의문이 들수 있다.
이는 앞에서도 말했든 vi에디터는 매우 오래되었으며 이당시에는 방향키가 키보드에 없었다는점이 그 이유중 하나이다.
복사, 삭제 및 되돌리기
y
|
복사
|
yy
|
커서를 포함하는 행 복사
|
dd
|
커서를 포함하는 행 잘라내기
|
7dd
|
커서를 포함하는 행을 포함하여 아래로 총 7행 잘라내기
|
dw
|
한 단어 잘라내기
|
7dw
|
7 단어 잘라내기
|
x
|
커서 위치 삭제
|
X
|
커서 앞글자 삭제
|
u
|
되돌리기 (undo)
|
일반적으로 vi에도 삭제와 잘라내기가 있다. dd같은 커맨드 사용시 클립보드에 그 행은 저장된다.
V를 누르면 들어가는 비주얼 모드의 경우 다음 사진과 같이 여러행을 드래그 할수 있으며, 복사를 한후 붙혀넣기나 여러행 한번에 삭제등이 가능하다.

빠른 이동
]
|
다음 함수의 block 시작지점으로 이동
|
[
|
이전 함수의 block 시작지점으로 이동
|
0 또는 ^
|
행의 시작지점으로 이동
|
$
|
행의 끝 부분으로 이동
|
gg
|
문서 맨 처음으로 이동
|
G
|
문서 맨 끝으로 이동
|
검색, 치환 및 행번호
이기능은 진짜 많이 사용하는 것 같다. 치환은 변수명을 갑자기 바꾸어주고 싶을경우 주로 쓰며, 검색은 어느 편집기이든 코드가 길어질 경우 주로 사용한다.
/(찾을내용)
|
찾을 내용이 있는 부분을 검색
|
n
|
다음으로 찾은 대상으로 이동
|
N
|
이전으로 찾은 대상으로 이동
|
%s/원래 단어/바꿀 단어
|
찾을 단어를 모두 찾은후 바꿀 단어로 바꾸기
|
set number
|
행번호 추가
|
행번호는 또한 [:]모드에서 set number라 입력해주면 행번호가 생기는것을 확인할 수 있다.

저장 및 종료
보통 윈도우에서 문서를 편집후 저장을 하지않고 종료를 누르면 프로그램이 저장을 하시겠습니까? 하고 물어보며 바로 종료해주지 않는다. 이처럼 vim에서도 :w를 이용하여 저장하지 않는다면 :q를 통한 종료가 되지 않으며, 이는 강제종료인 :q!등을 이용해야 한다.
w
|
저장
|
q
|
종료
|
wq
|
저장후 종료
|
q!
|
강제종료(저장안함)
|
wq!
|
강제저장 후 종료
|
종합 단축키 모음

3) 후기
나도 요즘 시스템프로그래밍 수업을 들으며 공부하며 차차 익혀가고 있던중에 글하나 써볼겸 정리한 글이다.
vim에 관련된 책이 또한 있기에 이또한 읽어본후 이글을 조금씩 더 추가해나갈 예정이다.
아마 2020년 말까지는 이글은 정기적으로 개선해나갈 예정이다.
'CS > System Programming (2021-2)' 카테고리의 다른 글
[시스템 프로그래밍] wait 함수 (0) | 2022.01.19 |
---|---|
[시스템 프로그래밍] Zombie Process : 좀비 프로세스 (0) | 2022.01.19 |
[시스템 프로그래밍] fork 함수 (0) | 2022.01.19 |
[시스템 프로그래밍] exec 함수들 (0) | 2022.01.19 |
[시스템 프로그래밍] Process : 프로세스 (0) | 2022.01.19 |
댓글