리눅스(linux) 익히기 - VIM 에디터 이해 및 실습

5. VIM 에디터 이해 및 실습

5.1. VIM 에디터 이해 및 설치

  • VIM : Vi improved 에서 앞 글자를 빼내어 만든 이름
    • Vi: 전통적이 유닉스 에디터(개발자: 빌 조이), Visual Editor의 줄임말
    • Vim 은 Vi에 자동화, 시각화 메뉴등을 추가한 프로그램
    • Vim 이외에 이맥스(Emacs, GNU 프로젝트 설립자 리차드 스톨만이 개발) 라는 유명한 에디터가 있음 (대부분 개발자는 두 에디터 중 하나를 사용함)

5.2. ubuntu vim을 위한 한글 설정

  1. 시스템 언어 설정 확인 (기본 설정으로 POSIX, glibc에서의 기본 로케일은 C 또는 POSIX)
    (참고1: POSIX - 이식 가능 운영 체제 인터페이스의 약자로, 다양한 유닉스 계열 운영체제 간 공통 시스템콜 또는 API 정의)
    (참고2: glibc - GNU 프로젝트의 일환으로 개발된 표준 C언어 라이브러리로 C++언어도 지원)

    # locale
    
  2. 한글 입력 패키지 설치

    # sudo apt-get install language-pack-ko
    
  3. 시스템 언어 설정 변경

    # sudo locale-gen ko_KR.UTF-8
    
    - 확인: ko_KR.UTF-8 UTF-8 만 샵(#) 표시가 없어야 함
    # vi /etc/locale.gen
    
  4. 재부팅시 기본적으로 한글을 설정할 수 있도록 /etc/default/locale 파일에 다음 설정 추가

    LANG="ko_KR.UTF-8"
    LANGUAGE="ko_KR:ko:en_US:en"
    
  5. vi ~/.vimrc 에도 다음 두 줄 추가

    set encoding=utf-8
    set fileencodings=utf-8,euckr
    

5.3. vim 네 가지 모드

  • 일반(명령) 모드: 처음 vim을 실행했을 때 또는 입력 모드/명령 모드에서 ESC입력 시 - 찾기, 커서 이동등
  • 명령(명령행) 모드: 일반 모드에서 : 입력 시 - 저장, 파일읽기, vim설정등
  • 입력(편집) 모드: 일반 모드에서 a 또는 i 또는 o 키 입력 시 - 내용 입력

  • Visual 모드: 일반 모드에서 v 입력 시 - 블럭 복사/붙이기

커서 이동 (방향키로도 지원되는 경우가 많음)

k       커서를 위로 움직임
j       커서를 아래로 움직임
h       커서를 왼쪽으로 움직임
l       커서를 오른쪽으로 움직임
입력 모드 진입 (입력 모드 진입 시, 왼쪽 하단에 "--INSERT-- " 라는 문구가 출력)

o  포커스 잡힌 커서 아래 라인으로 이동 후 편집모드 시작  
O  포커스 잡힌 커서 윗 라인으로  이동 후 편집모드 시작  
i  포커스 잡힌 커서 위치에서 편집모드 시작  
I  포커스 잡힌 커서의 라인 제일 앞으로 이동 후 편집모드 시작  
a  포커스 잡힌 커서의 다음 문자열에서 편집모드 시작  
A  포커스 잡힌 커서의 라인 제일 뒤로 이동후 편집모드 시작
블록 지정 및 복사 (Visual 모드에서 활용)

v          단어 단위로 블럭 지정.  
Shift + v  라인 단위로 블럭 지정.
y          지정된 블럭을 복사.   
p          복사된 블럭을 현재 커서에 붙인다.
u          직전 실행 작업 취소

자주 사용하는 시나리오
1. v 로 visual 모드로 들어간 후
2. Shift 를 누른채 커서 이동을 통해 블록 지정
3. y 를 눌러 블록 복사
4. 붙이기 필요한 곳으로 커서 이동 후 p 를 눌러 복사된 블록 붙이기
편집 

x          커서의 한 문자를 삭제한다.  
dd         커서의 현재 라인을 삭제한다. 
Shift + j  커서의 아랫라인과 현재 라인을 하나의 라인으로 합침
문자열 찾기 기능

일반 모드에서 / 를 누른 후 찾을 문자 입력 
정규 표현식 지원 (다음 기호는 a\+ 와 같이 백슬래시와 함께 사용해야 함)
+ : 1번 이상의 임의 번 반복. a+ 는 a, aa, aaa, ... 즉 aa* 와 동일.
| : a|b 는 a 또는 b
() : group, (ab|cd)ef 는 abef 또는 cdef
? : 없거나 하나 있거나. ab? 는 a 또는 ab

찾을 문자 입력 후 엔터 누르면 해당 문자열 색상 변경을 통한 표시

이 상태에서

n          다음 찾는 문자열로 이동
N          이전 찾는 문자열로 이동

참고: 파이썬과 정규표현식(https://wikidocs.net/4308)

문자열 교체 기능(명령 모드)

:(시작줄),(끝줄)s/찾을패턴/바꿀문자열/옵션

옵션 :
g : global - 한 줄에 패턴이 여러 번 나오면 모두 바꿈, 지정하지 않으면 첫번째 패턴만 치환
i : ignore case - 대소문자 구분을 하지 않음
c : confirm - 검색된 모든 문자열에 대해서 치환 여부에 대해 사용자 확인을 받음

예)
:5,10s/a/b/                5번째 줄부터 10번째 줄까지 각 줄의 첫번째 "a" 를 "b" 로 치환
:.,.+10s/a/b/g             현재 줄부터 (현재 행번호+10) 번째 줄까지 모든 "a" 를 "b" 로 치환
:1,$s/a/b/c                첫 번째 줄부터 마지막 줄까지 (즉 문서 전체) 각 줄의 "a" 를 "b" 로 바꾸되, 사용자에게 확인을 받음
:%s/a/b/gi                 문서 전체에서 "a" 와 "A" 를 "b" 로 치환
:%s/Hello/Good Morning/g   두 글자 이상의 문자열도 검색 및 치환 가능
파일 열기 및 저장

:e filename                filename 의 파일이 존재하면 오픈하고, 존재하지 않으면 해당 파일 이름으로 새로 파일을 만들고 오픈함
:w                         현재 오픈된 파일 저장
:q                         저장하지 않고 종료 (quit)
:wq                        현재 오픈된 파일 저장 후 종료
:wq {저장할 파일명}        현재 오픈된 파일을 저장할 파일명으로 저장 후 종료
:q!                        강제 종료 (대소문자 구문)
:wq!                       현재 오픈된 파일 강제 저장 및 종료

5.4. vim 설정

  • 명령(명령행) 모드에서 set all 입력 (결국 :set all 입력 후 엔터)
    • vim에서 설정할 수 있는 모든 옵션이 나옴
  • ~/.vimrc 파일에 필요한 vim 설정을 할 수 있음

실습 - vi 사용
- vi ~/.vimrc 후 다음 설정 입력 및 저장
 set nocompatible
 set autoindent
 set cindent
 set smartindent
 set wrap
 set nowrap
 set nowrapscan
 set nobackup
 set ruler
 set shiftwidth=4
 set number
 set fencs=utf-8
 set fileencoding=utf-8
 set tenc=utf-8
 set expandtab
 set hlsearch
 set ignorecase
 set tabstop=4
 set incsearch
 syntax on
 filetype indent on
 set background=dark
 colorscheme desert
 set backspace=eol,start,indent
 set history=1000

5.5. vim 팁

  • 한글 작성 중 한글이 깨져보일 시
    • sudo apt-get install language-pack-ko
    • sudo locale-gen ko_KR.UTF-8
    • sudo dpkg-reconfigure locales
    • vi ~/.vimrc 에서 아래 두 줄 추가
      • set encoding=utf-8
      • set fileencodings=utf-8,euckr