VI(VIM)

Violet_Evgadn·2023년 4월 26일
0

Linux

목록 보기
5/34

VI & VIM

VI(VIM)이란?

VI는 UNIX 계열 OS에서 매우 많이 활용되는 편집기로써 "Visual Editor"의 줄임말이다.

각종 문서를 Linux에서 편집할 수 있게 해주는 텍스트 기반 편집기로써 VI Editor가 Linux 활용의 첫걸음이라고 할 수 있다.

VI는 3가지 모드를 1개 기능에 합쳐 입력값을 통해 모드를 자유자재로 넘나들며 편집이 가능하다는 특징을 가지고 있다.

VIM은 "VI iMproved"의 약자로써 프로그램 소스 코드 편집 시 유용한 수많은 추가 기능이 포함된 VI 확장판이다.

VIM은 VI의 모든 기능을 가지고 있으며 VI에서 자주 발생하는 몇 가지 문제들도 처리해 놓은 VI의 개량판이라고 이해하면 될 것이다.

VIM에서 해결되는 대표적인 VI의 문제는 "방향키 문제"이다.

VI Editor를 사용 할 때 화살표를 누를 경우 창이 움직이지 않고 "D, B, C, A" 같은 이상한 알파벳이 입력되는 현상이 있다. 또한 Backspace를 눌러도 글이 지워지지 않아 수정이 안 되는 현상도 존재한다.

이런 경우 VIM Editor를 설치하여 사용하면 이런 문제를 걱정하지 않고서 문서를 편집할 수 있다.

최근 많은 Linux 환경에서는 alias vi='vim'을 통해 VI Editor를 사용하려 하면 자동으로 VIM Editor를 활용하도록 alias 설정을 해놓았다.

따라서 VIM = VI로 착각하는 사람도 있지만 엄연히 다른 기능임을 이해하고 가자.

VI에도 몇 가지 단점이 존재하지만 가장 큰 문제는 "불편하다"라는 것이다.

VI는 익숙해지면 편하고 강력하지만 익숙해지기까지는 매우 긴 학습 과정이 필요하다.

VI는 비직관적이고 학습 장벽이 있는 에디터이다보니 모든 기능을 제대로 활용하지 못할 경우 메모장보다도 장점이 없는 그저 불편한 문서 편집 도구일 뿐이다.

실제로 필자도 문구 수정을 많이 해야하는 Linux 파일인 경우 Windows로 파일을 가져와 일괄 수정을 한 후 다시 Linux에 넣는 경우도 많았다.

물론 농담이겠지만 아래 사진은 VIM Editor가 얼마나 비직관적이고 불편한지를 보여주는 예시라고 할 수 있겠다.

출처 : https://dev.to/flaviabastos/til-how-to-move-a-line-in-vim-4588

VI 모드

VI는 총 3가지 모드가 존재한다.

입력 모드(Text Input Mode)

  • 문서를 실제로 수정할 수 있는 모드
  • 이 모드에서만 텍스트 수정 및 입력이 가능함

명령 모드(Command Mode)

  • 처음 VIM Editor에 접속할 경우 사용되는 기본 모드
  • 입력 모드에서 라인 모드로 넘어가거나 그 반대의 경우 무조건 명령 모드를 중간 단계로 거치고 가야 함
  • 화살표 이동, 한 글자 또는 두 글자 명령어를 사용하여 커서를 이동하거나 문자열을 삭제, 교체 및 검색함
  • 잘못된 입력의 경우 삑하는 소리로 잘못된 입력임을 알려줌

라인 모드(Last Line Mode)

  • 명령 모드에서 콜론(:)을 눌러 접속하는 시스템 관련 부분을 담당하는 모드
  • 문서에 대한 검색 및 편집 기능을 수행할 수도 있지만 주로 문서 저장 및 편집기를 벗어나는 용도로 많이 활용

참고로 "비쥬얼 모드(Visual Mode)"라는 모드도 있기는 하지만 거의 활용하지 않으므로 설명은 생략하겠다.


VI 사용법

VIM alias 등록

VI를 입력해도 확장판인 VIM Editor를 사용하도록 alias를 등록하는 것이 좋다.

따라서 VIM Editor를 설치하고 alias에 등록하는 과정을 먼저 수행하자.

  1. sudo apt-get install vim을 통해 VIM Editor 설치
    • Ubuntu의 경우 "apt-get", CentOS의 경우 "yum" 명령어를 사용하면 된다.
  2. vim ~/.bashrc를 통해 .bashrc 접속 & alias vi='vim' 추가 & source ~/.bashrc로 설정 동기화
    • 이전에 Alias 등록 방법을 설명했으니 해당 Section을 참조하자.

Mode 이동

Shell → VI Editor 접속

vi [파일명]
무조건 Command Mode로 접속한다.

Command Mode → Shell

ZZ (Z : shift + z)

Command Mode → Last Line Mode

: (콜론)

Command Mode → Text Input Mode

  • i : 현재 커서 위치부터 텍스트 입력 ★
  • a : 현재 커서 다음 칸부터 텍스트 입력
  • I(Shift + i) : 현재 커서 줄 맨 앞에서부터 입력
  • A(Shift + i) : 현재 커서 줄 맨 마지막부터 입력
  • o : 현재 커서 다음 줄에 텍스트 입력
  • s : 현재 커서 위치의 글자를 지우고 텍스트 입력
  • O(Shift + i) : 현재 커서의 이전 줄에 입력
  • S(Shift + i) : 현재 커서 줄을 지우고 입력
  • 방법이 다양하긴 하지만 i만 많이 활용하고 그나마 a, I, A 정도 활용하는 것 같다.

Text Input Mode → Command Mode

ESC 버튼

Last Line Mode → Command Mode

ESC 버튼

한 눈으로 보는 Mode 간 이동

Last Line Mode(라인 모드) 사용법

  • w : 현재 변경사항 저장하기
  • q : VI Editor 나가기
  • ! : 강제로 라인 모드 명령어를 실행한다.

위 3개 명령어를 조합하여 Last Line Mode에서 VI Editor를 종료하고 Shell 환경으로 돌아간다.

주로 활용하는 조합 명령어는 아래와 같다.

  • :wq! : 변경 사항을 저장하고 나가기
  • :qa! : 변경 사항을 저장하지 않고 나가기

Last Line Mode의 또 다른 사용법은 "set 환경변수" 설정이다.

VI Editor에서 set을 통해 vi 환경 설정을 수행하면 더욱 쉽게 텍스트 편집 및 확인이 가능하다.

:set으로 설정한 환경 설정 값은 "no"를 붙임으로써 취소시킬 수도 있다.

예를 들어 :set nu로 설정한 VI 환경값을 취소시키고 싶다면 :set nonu로 "no"를 앞에 붙여준 명령어를 입력하면 된다.

유용할 것 같은 set 옵션들과 적용 전/후 사진을 추가하겠다.

:set ai - 윗 라인과 동일하게 들여쓰기를 수행

:set si - 코딩 할 때 if, for, while 등을 입력하고 다음 라인 이동 시 자동으로 들여 쓰기를 수행

:set paste

:set ai:set si같은 자동 들여 쓰기 옵션을 수행한 후 복사 붙여 넣기를 하면 계단 현상이 일어나는데 이 옵션을 통해 방지할 수 있음

:set nu - 문서 왼쪽에 라인 번호를 보여줌

:set ic - Keyword 검색 시 대소문자를 구별하지 않음

Sam을 검색했을 때 IC를 적용하지 않은 경우 정말 일치하는 "Sam"을 찾지만 IC를 적용할 경우 대소문자 구분을 하지 않으므로 "sam"을 찾는다.

  • :set ts=n : Tabl 키를 눌렀을 떄 이동 크기를 n으로 설정
  • :set sw=n : :set si 옵션을 사용할 경우의 자동 들여 쓰기 이동 크기를 n만큼으로 설정

Commnad Mode(명령 모드) 사용법

커서 이동

  • 화살표 : 커서 한 칸 씩 누른 방향으로 이동
  • w : 다음 단어의 처음으로 이동
  • 0 : 커서가 있는 줄의 첫 문자로 이동
  • $ : 커서가 있는 줄의 맨 끝으로 이동
  • gg : 문서의 가장 처음 줄로 이동
  • G(Shift + g) : 문서의 가장 끝 줄로 이동
  • nG : n번째 행으로 이동
  • Page Up : 이전 페이지로이동
  • Page Down : 다음 페이지로 이동

실행 취소

  • u : 직전에 내린 명령 취소

검색

  • /exp + 엔터 : 'exp'와 동일한 문자열을 현재 커서 위치부터 아래 방향으로 검색
  • ?exp + 엔터 : 'exp'와 동일한 문자열을 현재 커서 위치부터 위 방향으로 검색
  • n : (기존 검색 방향으로) 다음 문자 찾기
  • N : (기존 검색 방향의 반대 방향으로) 다음 문자 찾기

삭제, 복사, 붙여 넣기

  • x, delete : 현재 커서가 위치한 문자 삭제
  • dw : 단어 삭제
  • dd : 현재 커서 행 삭제
  • [Num] dd : 현재 커서부터 Num만큼의 행 삭제
  • yy : 현재 커서가 있는 행 복사
  • [Num] yy : 현재 커서부터 Num만큼의 행 복사
  • p : 복사한 내용을 현재 행 이후에 붙여 넣기
  • P : 복사한 내용을 현재 행 이전에 붙여 넣기

Line 관리

  • J(Shift + j) : 현재 줄에 다음 줄을 붙임

.vimrc

VI Editor에 일괄적으로 적용시키고 싶은 환경변수가 있을 수 있다.

예를 들어 Line에 번호를 붙여주는 "set nu"라던가 들여 쓰기를 해주는 "set ai"는 Default로 적용시키고 싶을 수도 있다.

이 경우 ".vimrc"라는 파일에 set 환경 변수 설정을 저장하면 VI Editor를 사용할 때 저장된 환경 변수가 Default로 적용된다.

".vimrc" 파일 설정 방법은 아래와 같다.

  1. vi ~/.vimrc 명령을 통해 .vimrc 파일 생성
  2. 적용하고자 원하는 set Option들을 입력 & 저장
    • set Option을 설정할 때 콜론(:)은 붙이지 않아도 된다. set Option의 콜론은 VI Editor에서 라인 모드로 가기 위한 키워드였을 뿐이다. .vimrc 파일에 텍스트로써 set Option들을 입력만 해주면 되므로 콜론을 붙이지 않아도 된다.
  3. vi로 파일을 하나 만들어 실제 적용되는지 확인

.vimrc에 set siset nu를 적용하고 VI Editor에 접속했을 경우 아무런 set 옵션을 주지 않았음에도 정상적으로 Set Option이 적용되었음을 확인할 수 있다.


부록 : ED Editor

ed는 Unix OS용 Line Editor이다.

VI Editor는 전체 글에 대한 Editor라면 ED는 1개 줄에 대한 Editor이다.

사용법이 VI Editor보다도 복잡하며 기능상 제한 사항도 많다.

운영 모드도 명령어 모드, 텍스트 입력 모드 2개밖에 없어 현재는 거의 활용되지 않고 Unix 기반 OS를 위한 POSIX와 오픈 그룹 표준의 일부로 남아있다.

  • POSIX : 이식 가능 운영 체제 인터페이스. 다른 환경에서 실행시키더라도 정상 동작하게 하는 이식성이 높은 Unix 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 Application Interface 규격
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글