사용자 도구

사이트 도구


linux:vi

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
linux:vi [2024/11/15 13:45] – [VI Editor] taekgulinux:vi [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +===== VI Editor =====
  
 +신규하님의 블로그에서 가져왔습니다.
 +(http://gyuha.tistory.com/157)
 +[[linux:vi:image|vi명령어 이미지 모음]]
 +
 +
 +vi와 Vim의 가장 큰 차이점은, Vim은 에디터에서 화살표 방향키로 커서의 이동이 되지만 vi는 이 방법으로는 커서의 이동이 되지 않는다는 것이다. 순수하게 vi만 설치되어 있다면 화살표 방향키가 아닌 h, j, k ,l로 커서를 이동할 수 있다.
 +==== .exrc 설정 ====
 +.exrc는 vi설정 파일이다.
 +.exrc에서는 vi를 사용해 문서를 편집하는 경우 exrc에서 설정된 값을 불러오면서 사용된다.
 +<code bash .exrc>
 +set number  --> 라인수표시
 +set ts=4    --> Tab
 +set ai      --> Auto Indent
 +</code>
 +$ source .exrc 해주거나,
 +terminal을 닫고 다시 실행시키면 바뀐 tab size 설정이 적용된다.
 +
 +==== utf-8 설정 ====
 +파일의 기본 encoding설정하기
 +<code bash /etc/vim/vimrc.local>
 +set encoding=utf-8
 +set fileencodings=utf-8,cp949
 +</code>
 +
 +==== color 설정 ====
 +vi의 컬러설정
 +<code bash .vimrc>
 +filetype plugin indent on
 +set term=xterm-256color
 +syntax on
 +</code>
 +
 +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 [커서위치의 한 행을 지우고 입력]
 +==== 이동 ====
 +<code>
 +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행으로 이동]
 +</code>
 +==== 삭제 ====
 +
 +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로 교체]
 +:s/old/new/g [현재 행의 모든 old를 new로 교체]
 +:10,20s/old/new/g [10행부터 20행까지 모든 old를 new로 교체]
 +[블럭지정중]:s/old/new/g [지정 블럭 내에서 모든 old를 new로 교체]
 +:-3,+4s/old/new/g [현재 커서 위치에서 위로 3행 아래로 4행까지의 old를 new로 교체
 +:%s/old/new/g [문서 전체에서 old를 new로 교체]
 +:%s/old/new/gc [문서 전체에서 old를 new로 확인하며 교체]
 +:g/pattern/s/old/new/g [pattern이 있는 모든 행의 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:] [:graph:]문자 중 [:alnum:]을 제외한 문자. ex)!,@,#,$,%,^.... 
 +[: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/old/new/g 모든 탭에 적용을 원할 때 (예 모든탭에서 old를 new로 변경)
 +==== 다중 창 관련 명령 ====
 +
 +== 창생성 ==
 +
 +CTRL-W s :[N]sp[plit] 현재 파일을 두 개의 수평 창으로 나눔 
 +CTRL-W v :[N]vs[plit] 현재 파일을 두 개의 수직 창으로 나눔 
 +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으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동