제가 공부한 후에도 참고할 수 있도록 작성하는 글입니다. 참고로 저는 WSL2 환경에서 vi를 사용하고 있습니다.
- 1) ViI? VIM?
- ● VIM이란 vi_Improved의 약자로 VI 에디터에 편리하고 막강한 기능을 추가한 에디터이다. 대부분의 Linux 베포판은 기본 에디터로 VIM이 설치되어 있으며 VI 명령으로 alias되어 있다. 즉, VI를 실행하면 자동으로 VIM이 실행된다.
- 그럼 이런 에디터는 왜 사용하는가? 기존 GUI 환경의 VS code 등이 더 편하지 않을까?
- 1) 키보드만으로 모든 것을 해결할 수 있다.처음이 어렵더라도 적응하여 사용하면 그 효율성이 매우 뛰어난 에디터이며 모든 리눅스에 설치되어 있어 매우 간단하다.또 마우스가 전혀 필요 없기 때문에 노트북 하나만으로도 모든 것을 해결할 수 있다.
- 2) 처음 만들어질 당시까지만 해도 GUI 환경이 발달하지 않았다.이는 그만큼 이 에디터가 낡았다는 뜻이다. 리눅스 내에서 사용되는 에디터 순위 조사 결과 vim이 압도적 1위에 오르는 것도 꾸준히 사랑받아온 증거가 될 것이다.
2) 사용법
● 먼저 Vim-tiny가 있고 Vim-Basic이 있다.Tiny 버전은 매우 기본적인 기능만을 제공하기 때문에 추가적으로 사용자가 Basic 버전을 설치해야 한다.
설치 후 터미널에 vi 입력시 자신의 버전 확인이 가능할 것이다.
● 설치 후 에디터를 사용하기 위해 터미널에 $vifilename 형식으로 입력하면 된다. 필자는C언어를주로사용하기때문에C파일을하나만들어본다.
입력 후 다음 화면과 동일한 화면으로 이동하게 될 것이다.
여기서 아무리 뭘 눌러봐도 입력이 안된다. 대부분 이곳에서 처음 당황한다. 이것은 모드에 대해 알아야 한다.
모드 전환
출처 – http://nolboo.kim/blog/2016/11/15/vim-for-beginner/1) 일반모드(명령모드) vi를 실행시켰을 때 가장 먼저 켜지는 화면이다. 각기 다른 모드에서 esc키를 누르면 항상 일반 모드로 돌아가게 되어 있다.
2) 입력 모드(편집 모드) 실질적으로 코드 편집을 실시하는 단계이다. 왼쪽 아래를 보면 — INSERT –라고 표시되어 있는 경우에 해당한다.
3) 비주얼 모드 V나 v키로 접근하며 일반적으로 여러 행을 선택할 때 주로 사용한다. 그 외의 기능은 아직 초보자에게 필요한 것은 없을 것이다. 다른 블로그에서는 아예 비주얼 모드를 제외하고 설명하기도 한다.
4) ex모드[:] 쉼표를 누르면 모드에 입장할 수 있다. 이 모드에서는 저장, 종료, 검색, 치환을 주로 사용한다.
이를 요약하면 다음과 같은 흐름으로 실행된다.
다음부터 나오는 명령어는 모두 일반 모든 상태에서 입력한다.글을 편집하든 무엇을 하든 ESC에서 일반 모드로 돌아간 뒤 사용하면 된다.삽입 명령 i 입력 모드 전환.커서 왼쪽에 삽입된다.I 커서를 포함하는 행의 맨 첫 번째 칸에 삽입 a 커서 오른쪽에 삽입 A 커서를 포함하는 행의 마지막 글자 뒤에 추가 o 커서를 포함하는 행 아래에 추가 O 커서를 포함하는 행 위에 추가 요약하면 다음과 같다.
커서 이동 프로그래머는 보통 게으름에서 해방되기 위해 코드를 짜는 사람들이다. 따라서 타이핑을 하고 방향키로 이동하여 움직이는 시간조차 아까울 수 있다. 이 때문에 vim에서는 다른 키로 커져 이동이 가능하다.
상기 키는 자세히 보면 키보드에 양손을 올려놓았을 때 오른손 위치에 해당하는 키이다. 이처럼 사소한 것까지도 모두 키보드로 통제하겠다는 것이다.
왜냐면 잠깐만 방향키도 키보드를 이용한 통제가 아닐까?하고 의문이 생긴다.
이는 전술한 바와 같이 vi 에디터는 매우 오래되었으며, 이 당시에는 방향키가 키보드에 없었던 것이 그 이유 중 하나이다.복사, 삭제 및 되돌리기 yy 커서를 포함하는 행 복사 dd 커서를 포함하는 행 잘라내기 7dd 커서를 포함하는 행을 포함하여 아래에 총 7행 잘라내기 dw 한 단어 잘라내기 7dw7 단어 잘라내기 x 커서 위치 삭제 X 커서 앞 글자 삭제 u 반환(undo) 일반적으로 vi에도 삭제와 절취가 있다. dd와 같은 명령어를 사용할 때 클립보드에 그 행은 저장된다.
V를 누르면 들어가는 비주얼 모드의 경우 다음 사진과 같이 여러 행을 드래그할 수 있으며 복사를 한 후 붙여넣기나 여러 줄 한 번에 삭제 등이 가능하다.
빠른 이동] 다음 관수의 block 시작 지점으로 이동[이전 함수의 block 시작 지점으로 이동 0 또는 ^행의 시작 지점으로 이동 $행의 끝 부분으로 이동 gg 문서의 맨 마지막에 이동 검색, 치환 및 행 번호가 기능은 정말 많이 사용되는 것 같다. 치환은 변수명을 갑자기 바꾸고 싶을 때는 주로 사용하며, 검색은 어느 편집기로든 코드가 길어질 때는 주로 사용한다. / (찾을 내용) 찾을 내용이 있는 부분을 검색n 다음에 찾은 대상으로 이동N 이전에 찾은 대상으로 이동 %s/원래 단어/바꿀 단어를 모두 찾은 후 바꿀 단어로 바꿀 setnumber 행 번호 추가 행 번호는 또한 [ : ] 모드에서 setnumber라고 입력하면 행 번호가 생기는 것을 확인할 수 있다.
저장 및 종료 보통 창에서 문서를 편집하여 저장하지 않고 마침을 누르면 프로그램이 저장됩니까? 하고 물어서 바로 끝내주지 않았다. 이와 같이 vim에서도 :w를 이용하여 저장하지 않으면 :q에 의한 종료가 불가능하며, 이는 강제 종료이다 :q! 등을 이용하여야 한다. w저장 q 종료 wq 저장 후 종료 q! 강제 저장 후 종료 q! 강제 저장 후 종료 종합 단축키 모음
3) 리뷰●나도 요즘 시스템 프로그래밍 수업을 들으며 공부하면서 차츰 익히다가 글 쓸 겸 정리한 글이다. vim과 관련된 책도 있기 때문에 이것도 읽은 후 이 글을 조금씩 추가해 나갈 예정이다. 아마 2020년 말까지는 이글은 정기적으로 개선해 나갈 예정이다.