Vi 사용하기Vi 시작하기- $ vi : vi 시작하기 
 - $ vi aaa.txt : aaa.txt 파일을 편집하면서 vi 시작 
 - $ vi -R aaa.txt : 읽기 전용으로 열기 
 
 |   | Esc |   | : 또는 / |   |  | 편집상태 | →  
← | 명령대기상태 
(Esc모드) | →  
← | 명령줄상태 |  |   | 삽입명령어 
i,a,A,I,o,O |   | Esc 또는 Enter  |   |  
 - 명령대기상태 → 편집상태 : 삽입명령어 (아래참조.) 
 - 편집상태 → 명령대기상태 : Esc글쇠. 
 - 명령대기상태 → 명령줄상태 : : 또는 / (아래참조) 
 - 명령줄상태 → 명령대기상태 : Esc 또는 Enter (아래참조) 
 
 커서의 이동 - h, l, j, k : 왼쪽(←, Back space), 오른쪽(→, space), 위(↑), 아래(↓) 
 - b, w : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. 
 - B, W : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. (문장부호 무시) 
 - e : 다음 단어의 끝 글자로 이동. 
 - E : 다음 단어의 끝 글자로 이동. (문장부호 무시) 
 - H, M, L : 화면의 맨 위/ 중간 / 맨 아래로 
 - 0 : 그 줄의 맨 처음으로 (숫자 0이다.) 
 - $ : 그 줄의 맨 끝으로 
 - + : 다음 줄의 처음으로 
 - - : 윗 줄의 처음으로 
 - 3| : 현재 줄의 3번째 열로 
 - 4H : 화면 상의 처음 줄부터 4줄 밑으로 
 - 4L : 화면 상의 마지막 줄부터 4줄 위로 
 - (, ) : 이전 문장의 시작으로 / 다음 문장의 시작으로 
 - {, } : 이전 문단의 시작으로 / 다음 문단의 시작으로 
 - [[, ]] : 이전 섹션의 시작으로 / 다음 섹션의 시작으로 
 
 편집 버퍼를 통한 이동- ^F, ^B : 한 화면 앞으로 / 뒤로 (^는 Ctrl글쇠를 의미.) 
 - ^D, ^U : 반 화면 앞으로 / 뒤로 
 - 4^B : 4화면 위로 이동 
 - 4^F : 4화면 아래로 이동 
 - 7^U : 7줄 위로 이동 
 - 7^D : 7줄 아래로 이동 
 - ^Y : 커서는 현재 위치 그대로 화면만 한 줄씩 아래로 이동 
 - ^E : 커서는 현재 위치 그대로 화면만 한 줄씩 위로 이동 
 
 행 단위 이동- :0 : 파일의 첫 번째 행으로 가기 (숫자 0) 
 - :10 : 10번째 행으로 가기 
 - :$ : 파일의 마지막 행으로 가기 
 - G : 파일의 마지막 행으로 가기 
 - 10G : 10번째 행으로 가기 
 
 삽입명령어 - i : 커서 위치부터 삽입 시작 
 - a : 커서 위치 오른쪽부터 삽입 시작 
 - A : 현재 줄의 맨 끝 부터 삽입 시작 
 - I : 현재 줄의 맨 처음 부터 삽입 시작 
 - o : 커서 아래에 행 삽입 
 - O : 커서 위에 행 삽입 
 
 삭제명령 - x : 현재 커서위치의 한 문자 삭제 
 - X : 현재 커서 왼쪽의 한 문자 삭제 
 - dd : 한 줄 지우기 
 - 4dd : 4 줄 지우기 
 - dw : 한 단어 지우기 
 - d2w : 2 단어 지우기 
 - D : 커서 오른쪽 행 삭제 
 - :5 d : 5 째 행 삭제 
 - :5,10 d : 5-10 째 행 삭제 
 
 파일의 저장 및 종료- :wq : 저장 후 vi 종료 
 - :w : 저장 (종료는 하지 않고 계속 편집) 
 - :q! : 저장하지 않고 vi 빠져나가기 
 - :w filename : filename으로 저장 후 계속 편집 
 - ZZ : 변경사항 저장 후 vi 종료 
 
 내용의 복사 및 이동- yy : 현재의 행 복사 
 - 5yy : 현재의 행 위치부터 5행 복사 
 - p : 아래(오른쪽)에 붙여넣기 
 - P : 위(왼쪽)에 붙여넣기 
 - f4yy : 현재의 행 위치부터 4행을 'f'라는 이름의 버퍼에 복사 
 - fp : 'f'라는 이름의 버퍼에 복사된 내 용을 현재 행 위치에 붙여넣기 
 - :3 co 7 : 3 행을 7행 다음으로 복사 
 - :1,3 co 7 : 1-3 행을 7행 다음으로 복사 
 - :3 m 7 : 3 행을 7행 다음으로 이동 
 - :1,3 m 7 : 1-3 행을 7행 다음으로 이동 
 
 내용 고치기- J : 현재 행과 아래 행 결합 
 - 3J : 3줄 합치기 
 - u : 이전 명령 취소 
 - cw : 단어 변경 
 - cc : 행 변경 
 - C : 커서 오른쪽의 행 변경 
 - s : 커서가 위치한 문자열 대체 
 - r : 한 글자만 변경 (입력 모드로 바뀌지 않음) 
 - R : 입력하는 대로 겹쳐써서 변경 
 - xp : 커서 위치 문자와 오른쪽 문자 교환 
 - - : 문자형(대,소문자) 변경 
 - U : 행 변경사항 취소 
 - :u : 이전의 최종행 취소 
 
 명령 취소 및 반복- . : 마지막 명령 반복 
 - 2. : 마지막 명령 2회 반복 
 - u : 마지막 명령 취소 
 - U : 현재 줄을 저장 
 
 행 번호 설정 및 화면표시- :set nu : 행 번호 표시 
 - :set nonu : 행 번호 숨기기 
 - := : 현재 줄번호 보여주기 
 - :/pattern/ = : pattern이 위치한 줄번호 보여주기 
 
 시스템이 다운된 후에 파일 되살리기- vi -r : 되살릴 수 있는 모든 파일 이름 보여주기 
 - vi -r file.txt : vi를 시작하여 지정한 파일 되살리기 
 
 다른 파일을 파일 내로 삽입- :r filename : 커서 다음에 파일 삽입 
 - :20 r filename : 파일을 20번째 행 다음에 삽입 
 
 새로운 파일 편집하기- :e fine.txt : file.txt 편집하기 
 - :e! : 현재의 편집중인 내용 무시하고 가장 최근에 편집한 내용 다시 편집하기 
 
 다중 편집하기% vi file1 file2 file3 
혹은 
:e file1 file2 file3 
했을 때,  - :args : 편집 중인 파일목록 보여주기 
 - :n[ext] : 다음 파일로 넘어가기 
 - :prev[ious] : 이전 파일로 넘어가기 (단 편집 중인 파일이 저장되지 않으면 다음 파일로 넘어갈 수 없다.) 
 
 문자열 탐색 - /aaa : 'aaa' 찾기 (현재 위치부터 뒤로) 
 - ?aaa : 'aaa' 역방향 찾기 (현재 위치부터 앞으로) 
 - / : 가장 최근에 검색한 문자열 다시 검색 
 - ? : 가장 최근에 검색한 문자열 다시 역방향 검색 
 - :set noh : 문자열 검색 후 문자열 강조 끄기 
 
 치환vi에서 치환은 정규표현식이 이용된다. (실제로 이 상태에서 실행하는 명령어는 ed나 ex라는 프로그램이 처리하게 된다. 그래서 보통 이 상태를 "ed-모드"라고 한다.) 문서에서 원하는 패턴을 찾으려면 바로 위에 '문자열 탐색'에서 설명된 바와 같이 /문자열 이나 ?문자열 을 사용한다. 문자치환 명령은 다음과 같다.  [형식] :범위s/변경전/변경후/수정자    '범위'는 명령이 실행될 범위(예: 10,20 이면 10행 부터 20행 까지)를 나타낸다. 's'는 치환(substitute)의 약자이며 '수정자'는 치환 명령의 세부사항을 결정한다. 필요한 것만 뒤에 적어주면 된다. (중복 가능)  - g (global) - 한 줄에서 일치하는 부분을 여러개 찾았을 때 전부 치환한다. 이것을 사용하지 않으면 처음 것만 치환. 
 - c (confirm) - 만족하는 정규표현식을 찾았을 때 치환하기 전에 확인한다. 
 - i (ignore-case) - 대소문자를 구별하지 않는다. 
 
 "변경전"과 "변경후"에 치환할 내용을 입력한다. "변경전"에 정규표현식을 적는다. 정규표현식으로 ., *, ^, $, [], \(...\), \<...\>, POSIX.2 단축 표현을 사용할 수 있다. 여기서 여러 문자를 묶여서 단위를 만들고 찾은 내용을 기억하는 특수문자가 \(, \)임을 주의해야 한다. 반대로 (, )가 일반문자이다. vim(VI iMproved)에서는 vi에 추가로 |, +, (?와 같은) =, {n,m}을 사용할 수 있지만, 앞에 \ 를 붙여야 한다. 또, vim에는 \i, \k, \p, \s 등의 단축 표현들이 있다.  "변경후"에 \n 과 & 를 사용할 수 있다. \n 는 "변경전"에서 n번째 \(...\) 에 대응하는 부분이고, & 는 "변경전"에 만족한 전체를 나타낸다. 예를 들어,  
:%s/\([0-9][0-9]*\) \([Cc]hapter\)/\2 \1/  
는 문서에서 12 Chapter같은 부분을 Chapter 12와 같이 치환하고,  
:%s/F[1-9][12]*/&/g  
는 HTML 문서에서 "F1" ~ "F12"란 단어 모두를 굵은 체로 바꿉니다. (주의! &는 정규표현식의 특수문자는 아니지만 vi의 특수문자이므로, 문자그대로의 &를 사용하려면 대신 \& 를 사용해야 한다.) 이외에도 (뒤를 모두 대문자로) \u 나 (뒤를 모두 소문자로) \l 같은 기능이 있다.  :%s/aaa/bbb/g - 파일 전체(g)에서 'aaa'을 'bbb' 로 치환  
:%s/^M//g - 파일 전체(g)에서 ^M 을 삭제. ^M은 Ctrl+V+Enter로 입력한다.  
:s/aaa/bbb/ - 현재 행에서 'aaa'을 'bbb' 로 치환  
:1,10 s/aaa/bbb/ - 1행부터 10행 까지 'aaa'을 'bbb' 로 치환  
:1,. s/str/rep/ - 1부터 현재행까지 'aaa'를 'bbb' 로 전부 바꾸기  
:g/감자/s//바위/gc - 각 발생 확인 후 대체  
 주의할 점은 치환명령어가 / 문자로 각 부분을 구분하기때문에 "변경전"이나 "변경후"에 / 문자를 사용하려면 \/ 같이 써야한다.  
필요하다면 / 대신 다른 문자를 사용해도 된다. 예를 들어,  
:%s/\/usr\/local\/bin\//\/usr\/bin\//g  
대신  
:%s#/usr/local/bin/#/usr/bin/#g  
가 알아보기 더 쉽다. 
  
 
 
 
   블로그 > 오순도순 
  http://blog.naver.com/putter/20757276  |  vi 환경에서 코딩 작업 등을 할때 사전에 설정해 두면 편리한 기능 들을 정리 해 보았습니다.   1. ": set" 으로 변경       :set ai (autoindeant)      --> 윗라인과 같이 자동으로 들려쓰기를 해 줍니다.          :set ts=4 (tabstop)      --> [tab] 키를 입력 하였을때 이동하는 크기를 조정 합니다.           (보통 "ts=4" 일때가 가장 적당한 듯 합니다.)       :set et (expandtab)      --> [tab] 키를 입력 하였을때 tab에 대당하는 space 만큼 이동 됩니다.           (Python 언어 코딩 할때 매우 편리 합니다.)       :set si     --> 코딩 할때 if, for 같은 것을 입력 하고 다음 라인으로 이동시 들려쓰기를 해줍니다.       :set sw=4 (shiftwidth)     --> "set si" 했을 경우 들려쓰기 하는 깊이를 설정 합니다.       :set encoding=cp949 or utf-8     --> 작업 하는 컴퓨터 또는 개발 언어에서 기본 인코딩 타입을 설정 할 수 있습니다.    [참고]  * 알고 있겠지만 모든 명령의 취소는 no를 앞에 붙여 주시면 됩니다. 예)  :set noai  
 * 항상 같은 설정이 되도록 하려면 UNIX는 홈디렉토리 아래에 .vimrc 에 넣어 주시구요     windows 는  vim 설치 디렉토리에 _vimrc 파일에 넣어 주시면 됩니다.     예) set ts=4          set si          set ai          set sw=4          set encoding=cp494  
 
2. vi 편집 작업시   1) 화면 스크롤     ^F : 한 화면 앞으로 스크롤     ^B : 한 화면 뒤로 스크롤     ^D : 반 화면 앞으로 스크롤     ^U : 반 화면 뒤로 스크롤     ^E : 한줄 앞으로 스크롤     ^Y : 한줄 뒤로 스크롤      H : 화면의 맨 윗줄로      M : 화면의 중간 줄로       I : 화면의 맨 아랫줄로     2) 화면 나누기     : vs  수직으로 나눔     : sp  스평으로 나눔     * 화면간 이동은 ^ww    3) 마크 이동    m[a~z] --> 현재의 위치를 기록    '[a~z] --> 기록한 위치로 이동  
4) 접기    V 로 블럭 설정을 한후에 'zf' 하면 접힘    'zo' 를 하면 다시 펴짐  
5) 함수/변수명 자동 완성     호출 하고자 하는 변수명이나 함수명의 앞글자만 쓰고서 ^p 를 입력 하면 자동 완성 됨  
6) 잠시 쉘로 나가기      ^z, 들어 올때는 fg  
 
기본 명령어는 기술 하지 않았으며, 잘 알려지지 않았고 알면 편리한 기능 위주로 정리 했습니다. 상세한 정보는 기존에 스크랩 해놓은 자료나 vim.org 에서 확인 하시기 바랍니다.  
작성 : 마그마(필명)  |  
 
 아래 웅자꺼를 쓸려면 프로그래밍 코딩 시 해당 코드가 활성화 되지 않는다. 이유는 vim 버전이 라이트버전이라서 기본적인 기능들만 포함되어져 있다. 
$ sudo apt-cache search vim-full 
$ sudo apt-get install vim-full 
$ vi .vimrc 
syntax on 
추가하면 된다. 
 
  웅자가 쓰는 vimrc.
  set nocompatible " VI 오리지널과 호환하는 모드를 사용하지 않음(VIM확장)
  set number " 라인번호를 붙임
  set backspace=indent,eol,start " BS로 라인끝과 처음 자동들여쓰기한 부분을 지날수 있음
  set tabstop=4 " 탭문자는 4컬럼 크기로 보여주기
  set shiftwidth=4 " 문단이나 라인을 쉬프트할 때 4컬럼씩 하기
  set autoindent " 자동 들여쓰기
  set visualbell " Alert 음을 화면 깜박임으로 바꿔보여주기
  set laststatus=2 " 최종상태 2개 기억하기
  set statusline=%h%F%m%r%=[%l:%c(%p%%)] " 상태표시줄 포맷팅
  set hlsearch  " / ? 명령 등으로 찾은 문자열을 하일라이트 해준다.
  syntax on " 적절히 Syntax에 따라 하일라이팅 해주기
  set background=dark " 이건 터미널 모드에선 영향이 없다.
  set hi=1000 "명령어 기록을 남길갯수 지정
  set hlsearch " / ? 명령 등으로 찾은 문자열을 하일라이트 해준다.
  set bs=indent,eol,start " 백스페이스 사용
 
 
  set ru " 커서의 위치를 항상 보이게 함.
  set ts=8 "탭 길이
  set sts=4 "들여쓰기 탭 간격
  set sw=4 " 들여쓰기 탭 간격
  set noet " 탭 -> 공백 변환 기능 (사용 안함)
  set sol "여러가지 이동 동작시 줄의 시작으로 자동 이동
  set hls "검색어 강조 기능
  set scs "똑똑한 대소문자 구별 기능 사용
 
  imap <F2> <C-X><C-O>
  map <F3> :set paste<CR>
  map <F4> :set nopaste<CR>
  vmap <F5> :norm i// i;<CR>
  vmap <F6> :norm xx<CR>
  vmap <F9> zf
  map <F10> zo
  map <F11> zc
  map <C-b> :tabprevious<CR>
  map <C-n> :tabnext<CR>
  map <F12> :tabnew<CR>:e .<CR>
 
  | 
0