문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| linux:vi [2023/04/01 17:08] – [.exrc 설정] taekgu | linux:vi [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ===== VI Editor ===== | ||
| + | 신규하님의 블로그에서 가져왔습니다. | ||
| + | (http:// | ||
| + | [[linux: | ||
| + | |||
| + | |||
| + | vi와 Vim의 가장 큰 차이점은, | ||
| + | ==== .exrc 설정 ==== | ||
| + | .exrc는 vi설정 파일이다. | ||
| + | .exrc에서는 vi를 사용해 문서를 편집하는 경우 exrc에서 설정된 값을 불러오면서 사용된다. | ||
| + | <code bash .exrc> | ||
| + | set number | ||
| + | set ts=4 --> Tab | ||
| + | set ai --> Auto Indent | ||
| + | </ | ||
| + | $ source .exrc 해주거나, | ||
| + | terminal을 닫고 다시 실행시키면 바뀐 tab size 설정이 적용된다. | ||
| + | |||
| + | ==== utf-8 설정 ==== | ||
| + | 파일의 기본 encoding설정하기 | ||
| + | <code bash / | ||
| + | set encoding=utf-8 | ||
| + | set fileencodings=utf-8, | ||
| + | </ | ||
| + | |||
| + | ==== color 설정 ==== | ||
| + | vi의 컬러설정 | ||
| + | <code bash .vimrc> | ||
| + | filetype plugin indent on | ||
| + | set term=xterm-256color | ||
| + | syntax on | ||
| + | </ | ||
| + | |||
| + | set term=xterm-256color | ||
| + | ===== VIM 명령어 정리 ===== | ||
| + | ==== 저장 및 종료 ==== | ||
| + | :w [저장] | ||
| + | :w file.txt [file.txt파일로 저장] | ||
| + | :q [vi 종료] | ||
| + | :q! [vi 강제종료] | ||
| + | ZZ [저장 후 종료] | ||
| + | :wq! [강제 저장 후 종료] | ||
| + | :e file.txt [file.txt파일을 불러옴] | ||
| + | :e [현재 파일을 불러옴] | ||
| + | :e# [바로 이전에 열었던 파일을 불러 옴] | ||
| + | ==== 입력모드전환 ==== | ||
| + | |||
| + | a [커서의 위치 다음칸부터 입력], A [커서 행의 맨 마지막부터 입력] | ||
| + | i [커서의 위치에 입력], I [커서 행의 맨 앞에서 부터 입력] | ||
| + | o [커서의 다음행에 입력], O [커서의 이전 행에 입력] | ||
| + | s [커서 위치의 한글자를 지우고 입력], cc [커서위치의 한 행을 지우고 입력] | ||
| + | ==== 이동 ==== | ||
| + | < | ||
| + | h [왼쪽], j [아래], k [위], l [오른쪽] | ||
| + | w or W [다음 단어의 첫 글자로 이동] | ||
| + | b or B [이전 단어의 첫 글자로 이동] | ||
| + | e or E [단어의 마지막 글자로 이동] | ||
| + | <CR> [다음 행 첫 첫 글자로 이동] | ||
| + | ^ [그 행의 첫 글자로 이동], $ [그 행의 마지막글자로 이동] | ||
| + | + [다음 행의 첫 글자로 이동], - [위 행의 첫 글자로 이동] | ||
| + | ( [이전 문장의 첫 글자로 이동], ) [다음 문장의 첫 글자로 이동] | ||
| + | { [이전 문단으로 이동], } [다음 문단으로 이동] | ||
| + | H [커서를 화면 맨 위로 이동], z<CR> [현재 행을 화면의 맨우로 이동] | ||
| + | M [커서를 화면 중앙으로 이동], z. [현재 행을 화면의 중앙으로 이동] | ||
| + | L [커서를 화면 최하단으로 이동], z- [현재 행의 화면의 최하단으로 이동] | ||
| + | [n]H [커서를 위에서 n행으로 이동], [n]L [커서를 아래에서 n행으로 이동 | ||
| + | ctrl+u [반 화면 위로 스크롤], ctrl+d [반 화면 아래로 스크롤] | ||
| + | ctrl+b [한 화면 위로 스크롤], ctrl+f [한 화면 아래로 스크롤] | ||
| + | gg or 1G [문서의 맨 처음으로 이동], G [문서의 맨 마지막 행으로 이동] | ||
| + | [n]G or :[n] [n행으로 이동] | ||
| + | </ | ||
| + | ==== 삭제 ==== | ||
| + | |||
| + | x or dl [커서 위치의 글자 삭제], X or dh [커서 바로 앞의 글자 삭제] | ||
| + | dw [현재 위치부터 스페이스까지 삭제], diw [현재 위치에 있는 단어 삭제] | ||
| + | dd [커서가 있는 행을 삭제], [n]dd [현재 커서부터 아래 n번째 줄까지 삭제] | ||
| + | dj [현재 커서와 아래 줄 삭제], [n]dj [현재 커서 부터 아래 n+1번째 줄까지 삭제] | ||
| + | dk [현재 커서와 윗 줄 삭제], [n]dk [현재 커서와 위로 n+1번째 줄까지 삭제] | ||
| + | D or d$ [현재 커서가 있는 위치부터 행 끝까지 삭제] | ||
| + | d0 or d^ [현재 커서가 있는 위치부터 행 시작까지 삭제] | ||
| + | ==== 복사 & 붙여넣기 ==== | ||
| + | |||
| + | yy or Y [커서가 있는 한 행 복사] | ||
| + | [n]yy or [n]Y [커서가 있는 n행 복사] | ||
| + | p [현재 커서에 붙여 넣기, 행 복사일 경우 아래 줄에 붙여넣음] | ||
| + | [n]p [n번 만큼 붙여넣기 반복] | ||
| + | P [현재 커서위치의 앞행에 붙여 넣기,행 복사일 경우 윗 줄에 붙여넣음] | ||
| + | |||
| + | ==== 텍스트 변경 명령어 ==== | ||
| + | cw 단어 변경 | ||
| + | cc 행 변경 | ||
| + | C 커서 오른쪽의 행 변경 | ||
| + | s 커서가 위치한 문자열 대체 | ||
| + | S 커서가 위치한 라인의 문자열 대체 | ||
| + | r 커서 위치 문자를 다른 문자로 대체 | ||
| + | r-Enter 행 분리 | ||
| + | J 현재 행과 아래 행 결합 | ||
| + | xp 커서 위치 문자와 오른쪽 문자 교환 | ||
| + | ~ 문자형(대, | ||
| + | u 이전 명령 취소 | ||
| + | U 행 변경 사항 취소, 이전의 최종 행 취소 | ||
| + | . 이전 최종 명령 반복 | ||
| + | |||
| + | ==== 블럭지정 ==== | ||
| + | |||
| + | == 블럭 지정 == | ||
| + | |||
| + | v [블럭 지정], V [줄단위 블럭 지정] | ||
| + | ctrl+v(윈도우에서는 ctrl+q) [비쥬얼 블럭 지정] | ||
| + | == 블럭 지정중명령 == | ||
| + | |||
| + | y [블럭 복사 하기] | ||
| + | r [치환] | ||
| + | d [지정 블럭 지우기] | ||
| + | u [소문자로 바꾸기], U [대문자로 바꾸기] | ||
| + | ~ [대소문자 전환] | ||
| + | J [행 합침] | ||
| + | : [선택 영역에 대하여 ex명령] | ||
| + | < [행 앞에 탭 제거] | ||
| + | > [행 앞에 탭 삽입] | ||
| + | ==== 문자열 탐색 및 치환 ==== | ||
| + | |||
| + | / | ||
| + | :s/old/new [현재 행의 처음 old를 new로 교체] | ||
| + | : | ||
| + | : | ||
| + | [블럭지정중]: | ||
| + | : | ||
| + | : | ||
| + | : | ||
| + | : | ||
| + | ==== vim 정규 표현식 ==== | ||
| + | |||
| + | ^ [행의 첫 문자([]안에서는 not의 의미) | ||
| + | $ [행의 끝] | ||
| + | . [아무 문자나 한 문자 의미] | ||
| + | \| [or의 의미] | ||
| + | [] [[]사이의 문자 중 하나] | ||
| + | \{min, max\} [min이상 max이하 반복됨] | ||
| + | * [앞의 내용이 0번 이상 반복됨] | ||
| + | \+ [앞의 내용이 1번 이상 반복됨] | ||
| + | \< [단어의 시작] | ||
| + | \> [단어의 끝] | ||
| + | \n [새 행 문자] | ||
| + | \t [탭 문자] | ||
| + | vim 확장 정규 표현 문자열 | ||
| + | \i 변수 지정에 사용되는 문자들 [0-9A-Za-z] | ||
| + | \I \i와 같지만 숫자는 제외 | ||
| + | \k keyword로 사용하는 문자 [_\.\-0-9A0Za-z] | ||
| + | \f 파일 이름으로 사용하는 문자 | ||
| + | \p 프린트 가능한 문자 | ||
| + | \P \p와 같지만 숫자는 제외 | ||
| + | \s whitespace character(공백과 탭) | ||
| + | \S non-whitespace character | ||
| + | \d 숫자 [0-9] | ||
| + | \D 숫자가 아닌 문자 [^0-9] | ||
| + | \x 16진수 숫자 [0-9A-Fa-f] | ||
| + | \X 16진수 숫자가 아닌 문자 [^0-9A-Fa-f] | ||
| + | \o 8진수 숫자 [0-7] | ||
| + | \O 8진수 숫자가 아닌 문자 [^0-7] | ||
| + | \w 영문 단어의 시작에 사용되는 문자 [0-9A-Za-z-] | ||
| + | \W 영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-] | ||
| + | \h 영문 단어의 시작에 사용되는 문자 [A-Za-z-] | ||
| + | \H 영문 단어의 시작에 사용 되지 않는 문자 [^A-Za-z-] | ||
| + | \a 모든 알파벳 [A-Za-z] | ||
| + | \A 알파벳이 아닌 문자 [^A-Za-z] | ||
| + | \l 소문자 [a-z] | ||
| + | \L 소문자가 아닌 문자 [a-z] | ||
| + | \u 대문자 [A-Z] | ||
| + | \U 대문자가 아닌 문자 [^A-Z] | ||
| + | \e Esc | ||
| + | \t Tab | ||
| + | \r 캐리지 리턴 | ||
| + | \b 백스페이스 | ||
| + | \n 새 행 | ||
| + | ==== POSIX 문자 클래스 ==== | ||
| + | |||
| + | [:alnum:] 알파벳과 숫자 [A-Za-z0-9] | ||
| + | [:alpha:] 알파벳 [A-Za-z] | ||
| + | [:cntrl:] 제어 문자 | ||
| + | [:blank:] 탭과 공백 문자 | ||
| + | [:digit:] 숫자 [0-9] | ||
| + | [:graph:] 제어문자와 공백 문자를 제외한 문자 | ||
| + | [:lower:] 소문자 [a-z] | ||
| + | [:upper:] 대문자 [A-Z] | ||
| + | [:print:] 제어문자를 제외한 문자, 즉 프린터 할 수 있는 문자 | ||
| + | [:punct:] [: | ||
| + | [:space:] 화이트스페이스 ex)공백, 탭, 케리지 리턴, 새행, 수직탭, 폼필드 | ||
| + | [:xdigit:] 16진수 | ||
| + | ==== 파일 버퍼 ==== | ||
| + | |||
| + | :files or :ls or :buffers 버퍼 목록 나열 | ||
| + | :b[n] n번 버퍼로 이동 | ||
| + | :bd[n] or :bw[n] n번 버퍼를 삭제 (n이 없으면 현재의 버퍼를 삭제) | ||
| + | :bp[n] 이전 버퍼로 이동,n을 붙이면 n번만큼 이전 버퍼로 이동 | ||
| + | :bn[n] 이후 버퍼로 이동,n을 붙이면 n번만큼 이후 버퍼로 이동 | ||
| + | :sb[n] 창을 수평분할 하여 n번 버퍼를 로드 | ||
| + | :bf 첫 번째 버퍼로 이동 | ||
| + | :bl 마지막 버퍼로 이동 | ||
| + | ==== Tab ( vim7.0부터 추가된 기능 ) ==== | ||
| + | |||
| + | :tabnew 새로운 탭을 열기 | ||
| + | :tabnew b.txt b.txt가 존재하면 열고, 없으면 새로 만들어서 연다 | ||
| + | :tabf b.txt b.txt가 존재하면 열고, 없으면 에러 발생 | ||
| + | :tabn[n] 다음 탭을 열기,n을 붙이면 n번 만큼 이동 | ||
| + | :tabp[n] 이전 탭을 열기,n을 붙이면 n번 만큼 이동 | ||
| + | :tabs 탭 목록 보기 | ||
| + | :tabclose 탭을 닫기 | ||
| + | :tabfirst 첫번째 탭을 열기 | ||
| + | :tablast 마지막 탭을 열기 | ||
| + | :tabdo %s/ | ||
| + | ==== 다중 창 관련 명령 ==== | ||
| + | |||
| + | == 창생성 == | ||
| + | |||
| + | CTRL-W s : | ||
| + | CTRL-W v : | ||
| + | CTRL-W n :new 새로운 수평 창 생성 | ||
| + | CTRL-W ^ 또는 CTRL-W CTRL-^ 수평 창으로 나누고 이전 파일의 오픈 | ||
| + | CTRL-W f 창을 수평으로 나누고 커서 위치의 파일 오픈 | ||
| + | CTRL-W i 커서 위치의 단어가 정의된 파일을 오픈 | ||
| + | == 창삭제 == | ||
| + | |||
| + | CTRL-W q :q[uit]! 현재 커서의 창을 종료 | ||
| + | CTRL-W c :close 현재 커서의 창 닫기 | ||
| + | CTRL-W o :on[ly] 현재 커서의 창만 남기고 모든 창 삭제 | ||
| + | == 창이동 == | ||
| + | |||
| + | CTRL-W h 왼쪽 창으로 커서 이동 | ||
| + | CTRL-W j 아래쪽 창으로 커서 이동 | ||
| + | CTRL-W k 위쪽 창으로 커서 이동 | ||
| + | CTRL-W l 오른쪽 창으로 커서 이동 | ||
| + | CTRL-W w 창을 순차적으로 이동 | ||
| + | CTRL-W p 가장 최근에 이동한 방향으로 이동 | ||
| + | CTRL-W t 최상위 창으로 이동 | ||
| + | CTRL-W b 최하위 창으로 이동 | ||
| + | == 창이동 == | ||
| + | |||
| + | CTRL-W r 순착으로 창의 위치를 순환 | ||
| + | CTRL-W x 이전 창과 위치를 바꿈 | ||
| + | CTRL-W H 현재창을 왼쪽 큰화면으로 이동 | ||
| + | CTRL-W J 현재창을 아래쪽 큰화면으로 이동 | ||
| + | CTRL-W K 현재창을 위쪽 큰화면으로 이동 | ||
| + | CTRL-W L 현재창을 오른쪽 큰화면으로 이동 | ||
| + | == 창 크기 조정 == | ||
| + | |||
| + | CTRL-W = 창의 크기를 모두 균등하게 함 | ||
| + | CTRL-W _ 수평 분할에서 창의 크기를 최대화 | ||
| + | CTRL-W | 수직 분할에서 창의 크기를 최대화 | ||
| + | CTRL-W [N]+ :res[ize] +N 창의 크기를 N행 만큼 증가 | ||
| + | CTRL-W [N]- :res[ize] -N 창의 크기를 N행 만큼 감소 | ||
| + | CTRL-W [N]> 창의 크기를 오른쪽으로 N칸 만큼 증가 | ||
| + | CTRL-W [N]< 창의 크기를 오른쪽으로 N칸 만큼 감소 | ||
| + | == 기타 == | ||
| + | |||
| + | 다중창 사용의 경우 대부분 붙여서 사용하는 명령어는 CTRL을 같이 눌러도 똑같은 역활을 하는 경우가 많다. | ||
| + | 예) CTRL-W j 는 CTRL-W CTRL-J와 같다. | ||
| + | ==== 마킹 및 마킹위치로 이동 ==== | ||
| + | |||
| + | m[a-z0-9] 파일내에서 마킹, 현재 버퍼내에서만 이동 함 예)ma | ||
| + | m[A-Z] 전체영역에서 마킹, 다른 파일로도 이동 함. | ||
| + | `[A-Za-z0-9] 마킹된 위치로 돌아감 예)`a | ||
| + | ’[A-Za-z0-9] 마킹된 행의 처으으로 이동함. 예)‘a | ||
| + | ” 직전에 커서가 위치하던 행의 처음 | ||
| + | `` 직전의 커서 위치로 이동 | ||
| + | ’” 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동 | ||
| + | `" 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동 | ||