150 likes | 294 Views
Vi 세미나. leesumi@sparcs.kaist.ac.kr. Contents. 시작 , 종료 , 저장 시작 저장 , 종료 환경설정 이동 , 검색 <range>, 검색 , 치환 , 커서이동 편집버퍼를 통한 이동 쉘명령 실행 편집 삽입 , 치환 , 삭제 , 복사와 이동 기타. 시작 , 저장 & 종료. < 시작 >. vi file vi 를 시작하여 지정한 파일 편집 vi -R file 읽기 전용 (read-only) 모드로 지정한 파일 편집
E N D
Vi세미나 leesumi@sparcs.kaist.ac.kr
Contents • 시작, 종료, 저장 • 시작 • 저장, 종료 • 환경설정 • 이동, 검색 • <range>, 검색, 치환, 커서이동 • 편집버퍼를 통한 이동 • 쉘명령 실행 • 편집 • 삽입, 치환, 삭제, 복사와 이동 • 기타
시작, 저장&종료 <시작> • vi file vi를 시작하여 지정한 파일 편집 • vi -R file읽기 전용(read-only) 모드로 지정한 파일 편집 • view file읽기 전용(read-only) 모드로 지정한 파일 편집 • vi -r되살릴 수 있는 모든 파일 이름 보여 주기 • vi -r file vi를 시작하여 지정한 파일 되살리기 <저장&종료> • :f현재 편집하는 화일정보(& ^G) • :w 원래의 파일로 데이터를 저장 • :w file file 지정한 파일로 데이터를 저장 • :w >>file지정한 파일에 데이터를 추가 • :wq 데이터를 저장하고 종료 • :x저장 & 종료 (& ZZ) • :q!데이터를 저장하지 않고 종료
환경설정 <환경설정> • :set nu(mber)줄 번호 디스플레이(<-> :set nonu(mber)) • :set ai autoindent (<-> :set noai) • :set ts=8 tapstop - tab칸수를 8로 설정 • :set all모든 환경변수를 출력 • :cc현재 c화일을 컴파일 - 저장후에 사용할 것 <줄 번호> • nG 줄번호 n으로 건너뛰기 • 1G편집 버퍼의 첫 줄로 건너뛰기 • G편집 버퍼의 마지막 줄로 건너뛰기 • ma현재 커서위치를 mark a로 설정(a-z)
이동&치환 I - <range> < 줄 범위 표현 방법 <range> > • 'a mark a • $현재 문서의 끝 줄 • .현재 커서가 위치하는 줄 • 1,10 1-10번 줄 • %문서 전체 < 정규 표현식을 사용하기 위한 특수 기호 > • .뉴라인을 제외한 모든 단일 문자와 대응 • * 영 또는 그 이상의 선행 문자와 대응 • ^줄의 시작과 대응 (<-> $) • \<단어의 시작과 대응(<-> \<) • [ ]묶여진 문자중의 하나와 대응(<->[^]) • \ 이어지는 기호를 문자 그대로 해석
이동&치환 II - 패턴치환&검색 < 패턴 검색, 치환 > • /rexp 지정된 정규 표현식(rexp)에 대해 앞으로 이동 • /이전의 패턴에 대해 앞으로 검색을 반복 • ?rexp지정된 정규 표현식에 대해 뒤로 이동 • ?이전의 패턴에 대해 뒤로 검색을 반복 • n /나 ?명령에 대해 같은 방향으로 반복(<->N) • :s/rexp/to/현재 줄의 첫째 정규표현식을 찾아 to로 치환 • :10s/rexp/to/ 10번째 줄의 치환 • :1,2s/rexp/to/ 1-2줄의 치환 • :.,5 s/rexp/to/ 현재줄에서 5번째줄까지 치환 • :% s/rexp/to/g모든 줄의 모든 'rexp'을 치환 • :<range> s/rexp/to/g <range>범위에서 'rexp'를 모두 치환
이동&치환III - 커서이동 < 커서 이동 > • h<Left> , j<Down>, k<Up>, l<Right> • <Backspace> <-> <Space> • -커서를 이전 줄의 처음으로 이동(<-> + 다음줄) • 0커서를 현재 줄의 맨 앞으로 이동(<-> $ 맨끝으로) • w커서를 다음 단어의 첫 글자로 이동(=W문장부호무시) • e 커서를 다음 단어의 끝 글자로 이동(=E문장부호무시) • b커서를 이전 단어의 첫 글자로 이동(=B문장부호무시) • ( 다음 문장의 처음으로 이동(<-> ) ) • {다음 문단의 처음으로 이동(<-> } ) • H커서를 화면 맨 위로 이동, M커서를 중간으로 이동 • L커서를 맨 아래로 이동
이동&치환IV - 편집버퍼이용 < 편집 버퍼를 통한 이동 > • ^F한 화면 아래로 이동 <-> ^B한 화면 위로 이동 • n^F n화면 아래로 이동 • ^D반 화면 아래로 이동 <-> ^U반 화면 위로 이동 • ^Y한줄 위로 스크롤 <-> ^E한줄 아래로 스크롤 < 셸 명령 실행 > • :!command vi를 중단하고 지정한 셸 명령을 실행 • :!! vi를 중단하고 이전의 셸 명령을 실행 • :sh vi를 중단하고 셸을 실행 • :!csh vi를 중단하고 새로운 C-셸을 실행
편집 - 삽입 <화일을 읽어서 삽입> • :10r file file의 내용을 10번째 줄 다음 에 삽입 • :r file file의 내용을 현재의 줄 다음 에 삽입 • :10r !command command의 결과를 10번째 줄 다음에 삽입 • :r !command command의 결과를 현재의 줄 다음에 삽입 • :r !look pattern 지정한 pattern으로 시작된 단어 삽입 < 삽입 > • i 입력 모드로 전환, 커서 위치 앞에서 삽입 • I입력 모드로 전환, 현재 줄의 앞에 삽입 • a입력 모드로 전환, 커서 위치 뒤에서 삽입 • A입력 모드로 전환, 현재 줄의 끝에 삽입 • o 입력 모드로 전환, 현재 줄의 아래에 전개 • O입력 모드로 전환, 현재 줄의 위에 전개
편집 -치환 I < 내용 고치기> • J줄의 결합 • r 단지 한 글자만 변경(입력 모드로 바뀌 지 않음) • R입력하는 대로 겹쳐 써서 변경 • s 삽입에 의해 한 단어의 변경 • C커서의 위치로부터 줄 끝까지 삽입에 의한 변경 • cw한 단어 변경 • cc전체 줄을 삽입에 의한 변경 • S 전체 줄을 삽입에 의한 변경 • c'a커서부터 mark a까지 삽입에 의해 변경 • ~ 대,소문자 바꾸기
편집 -치환 II < 고치기의 취소 또는 반복 > • u 편집 버퍼를 수정했던 마지막 명령을 취소 • U 현재 줄을 저장 • . 편집 버퍼를 수정했던 마지막 명령 반복 <밀어내기> • >>현재 줄을 오른쪽으로 밀어냄 • <<현재 줄을 왼쪽으로 밀어냄 • 10>>현재줄부터 10줄을 오른쪽으로 밀어냄 • >'a현재줄부터 mark a까지를 오른쪽으로 밀어냄 • :<range> > <range>를 오른쪽으로 밀어냄 • :<range> < <range>를 오른쪽으로 밀어냄 • :set sw=8 shiftwidth - 밀어내기 칸수를 8로 설정
편집 -삭제 < 삭제> • x커서가 있는 문자 삭제 • X커서의 왼쪽 문자 삭제 • D커서부터 줄의 끝까지 삭제 • dw한 단어 삭제 • dd현재 줄의 전체 삭제 • d'a 커서부터 mark a까지 삭제 • dG커서부터 편집 버퍼의 끝까지 삭제 • d1G커서부터 편집 버퍼의 맨 앞까지 삭제 • :10d 10번째줄의 삭제 • :10, 20d 10~20까지 줄을 삭제 • :<range>d <range>의 범위를 삭제
편집 -복사I < Cut Buffer로 복사하기 > • yy한줄을 cut buffer로 복사 • nyy n줄을 cut buffer로 복사 • y'a현재위치에서 mark a줄까지 복사 • "a Cut buffer를 "named buffer" a로 지정(a-z) • "ayy buffer a에 한줄 복사 • 10"ayy buffer a에 한줄 복사 • "ay'b buffer a에 현재위치부터 mark b까지 저장 • :<range>y <range>범위를 cut buffer에 복사 • :<range>y"a <range>범위를 buffer a에 복사 • v블럭을 화면상에서 반전상태로 지정(elvis) • p cut buffer로 내용을 커서의 뒤/아래에 삽입 • "ap buffer a의 내용을 커서의 뒤/아래에 삽입 • P 커서의 앞/위에 삽입
편집 -복사II < 여러 줄의 복사와 이동 > • :10co20 10번째 줄을 복사하여 20번째 줄 밑에 삽입 • :10,20co30 10-20줄 범위를 복사하여 30번째 줄 밑에 삽입 • :<range>co'c <range>를 복사하여 mark c밑에 삽입 • :<range>t20 co와 동일 • :10m20 10번째 줄을 이동하여 20번째 줄 밑에 삽입 • :10,20m30 10-20줄 범위를 이동하여 30번째 줄 밑에 삽입 • :<range>m'c <range>를 mark c밑으로 이동
기타 < 데이터를 처리하기 위한 셸 명령의 사용 > • n!!command n번 줄에서 command의 실행 • !'a command커서부터 mark a까지 command 실 행 • !'a fmt커서부터 move까지 줄들을 형식 맞추기