들어가며
이번 포스팅에서 다룰 내용은 리눅스 계열 운영체제의 기본 텍스트 에디터인 vi이다. vi는 1970년대 UNIX 계열 운영체제에서 쓰이는 문서 편집기이다. vi를 모르는 사람이라면 터미널에서 작업하다가 vi를 사용해 모든 키보드 입력이 안 먹혀서 당황한 적이 있을 것이다. 편집기를 CLI으로 사용할 수 있게 해주는 vi에 대해서 알아보자.
미리 보기 사진으로 Vim의 이미지를 가져왔는데, 현재는 대부분 vi와 vim을 같이 사용한다. 대부분의 유닉스와 리눅스 배포판에서 vi 명령어를 쓰게 되면 자동으로 vim을 사용하도록 연결해 주게 된다. 따라서 이번 포스팅에서는 vi라고 부를 것이지만 내부적으로는 vim을 쓰고 있는 것이 된다. vim을 쓰고 있는 것인 지 키보드 화살표 키를 통해서 확인할 수 있다. 전통적인 vi 자체에서는 H,J,K,L 키를 통해서 커서를 이동하지만, vim의 경우에는 키보드를 통해서 커서를 이동할 수 있는 등 보다 직관적인 성능을 가졌다. Vim의 뜻 자체가 vi improved라는 것을 생각하면 직관적인 기능이다.
본론
먼저 vi는 기본적으로 리눅스 계열에 내장되어 있기 때문에 별도의 라이브러리 설치를 필요로 하지 않는다. vi 명령어를 통해서 CLI로 텍스트 편집 명령어를 치게 되면 먼저 명령 모드로 진입하게 된다.
vi를 실행시키면 세 가지 모드를 가지게 된다. 명령 모드(command mode), 입력 모드(inster mode), 마지막 행 모드(Last line Mode) 이렇게 세 가지를 가지게 되는데, 일반적으로 다음과 같은 구조로 파일을 편집한다.
위 사진은 vi에 대해서 핵심적인 부분을 통해서 모드를 전환하는 방법에 대해서 나타낸 사진이다. 앞으로 설명을 할 때에 마지막 행 모드를 콜론 모드로 부르도록 할 것이다.
명령 모드(command mode)
가장 기본적으로 vi를 실행시키면 명령 모드 상태가 된다. 이 때는 주로 커서 이동이나 커맨드를 통해서 줄, 글자 삭제 및 복사 등을 처리할 수 있다. 자주 쓰는 명령어들은 다음과 같다.
- i - 현재 커서 위치에 삽입 ( 입력 모드로 전환 )
- a - 현재 커서 바로 다음 위치에 삽입 ( 입력 모드로 전환 )
- o - 현재 줄 다음 위치에 삽입 ( 입력 모드로 전환 )
- x - 커서가 위치한 곳의 글자 1개 삭제
- dw - 커서가 위치한 곳에서부터 단어 삭제
- dd - 커서가 위치한 곳의 한 줄 삭제
- u - 방금 한 명령 취소
- yy - 현재 줄을 버퍼로 복사
- p - 현재 커서가 있는 줄 바로 아래 버퍼 내용을 붙여 넣음
콜론 모드(last line mode)
명령 모드에서 콜론(:)을 누르면 콜론 모드로 전환된다. 자주 쓰는 명령어는 다음과 같다.
- w - 현재 파일명으로 저장
- w [파일명] - 입력한 파일명 저장
- q - vi 종료 ( 저장되지 않음 )
- q! - vi 강제 종료
- wq - 저장하고 나서 종료
- wq! - 강제 저장 후 종료
- f [파일명] - 파일 이름을 [파일명]으로 변경
입력 모드(insert mode)
명령 모드에서 i 및 a 키를 누르면 입력 모드로 전환되는데, 평범하게 문서를 편집할 수 있게 된다. 문서 작성을 끝낸 후 저장 및 종료 등의 기능을 사용하기 위해서는 다시 명령 모드로 돌아가야 한다. 이때 ESC를 눌러 명령 모드로 돌아갈 수 있다.
vi 커스터마이징
이렇게 자주 쓰게 될 vi 에디터는 다양한 커스터마이징 기능을 제공한다. 홈 디렉터리에 있는 .vimrc 파일을 수정함으로써 다양한 기능을 추가할 수 있는데, 이는 콜론 모드에서 :help option-summary를 입력하면 다양한 플러그인에 대한 설명을 볼 수 있다. 내용이 굉장히 방대하고 보기 힘들기 때문에 한글로 자세히 쓰여 있는 링크를 첨부한다. 다음의 링크를 참고해서 본인에게 필요한 설정을 직접 삽입해 주면 된다.
- simple_vim_guide/md/vimrc.md : https://github.com/johngrib/simple_vim_guide/blob/master/md/vimrc.md
필자가 사용하는 설정은 다음과 같다. vi ~/.vimrc를 통해서 다음과 같은 설정 후 저장하면 vi 텍스트 에디터가 설정에 맞춰 동작하게 된다. 나는 문법에 하이라이트를 주는 기능과 자동 들여 쓰기, 행 번호 표시, 커서 위치 표시 그리고 쿠버네티스 및 도커 스크립트 작성을 위해 특정 확장자 파일에서는 탭 스페이스를 2로 주는 옵션을 다음과 같이 추가했다.
if has("syntax")
syntax on
endif
set autoindent
set nu
set ruler
:autocmd FileType yaml,yml set ts=2
마치며
관련한 포스팅을 추가하면서 재미있는 레퍼런스를 발견했다.
- Vim은 어디서 왔나 : https://blog.koriel.kr/where-vim-came-from/
Vim의 역사에 대해서 다루는 내용인데, 생각보다 재미있었다.
참고
- [개발자 지망생] vi 명령어 정리 : https://blockdmask.tistory.com/25
- [heyhyo] vim 설정하기 : https://hyoje420.tistory.com/51
'Developer' 카테고리의 다른 글
git, github에 대해서 (0) | 2024.01.21 |
---|---|
인증과 인가에 대해서 (2) | 2023.10.02 |
Webhook에 대해서 (1) | 2023.10.01 |