190 likes | 407 Views
Lecture 3. vi 편집기 사용법. Spring 2006 Course, Sungkyunkwan University Hyunseung Choo choo@ece.skku.ac.kr. VI 사용법. 유닉스 기본적으로 콘솔 환경에서 대부분의 작업을 처리하기 때문에 에디터를 잘 사용하는 것이 무엇보다 중요 vi ' Vi sual edit' 의 약자 , 유닉스 환경의 대표적인 편집기 vi 의 장점 키보드로 모든 것이 가능하다 많은 명령들이 매우 단순하며 일관성이 있다. VI 사용법.
E N D
Lecture 3. vi 편집기 사용법 Spring 2006 Course, Sungkyunkwan University Hyunseung Choo choo@ece.skku.ac.kr
VI 사용법 • 유닉스 • 기본적으로 콘솔 환경에서 대부분의 작업을 처리하기 때문에 에디터를 잘 사용하는 것이 무엇보다 중요 • vi • 'Visual edit'의 약자, 유닉스 환경의 대표적인 편집기 • vi의 장점 • 키보드로 모든 것이 가능하다 • 많은 명령들이 매우 단순하며 일관성이 있다
VI 사용법 • 버퍼(buffer) • 삽입, 삭제 시 이를 파일에 직접 반영하지는 않고, 메모리의 버퍼라는 임시 저장소에 일단 반영해 두었다가 저장 명령을 수행할 때 비로소 파일에 적용 • 종류 • '스크린 버퍼' • 파일에 대한 기본적인 버퍼 외에 현재 화면 창을 통해 보이는 • '라인 버퍼' • 편집 중인 스크린 버퍼에서 커서가 위치한 줄에 해당 • '임시 버퍼' • 블록 설정 • '이름 버퍼' • 이런 임시 버퍼를 클립보드(clipboard)처럼 여러 개 활용할 수 있도록 a부터 z까지 이름을 붙여서 활용 • '숫자 버퍼' • 삭제한 부분을 삭제한 반대 순서로 다시 살릴 수 있도록 여유를 제공
VI 사용법 • 기본적인 편집명령 • 명령모드 • 키 입력을 통해 vi에게 명령을 내리는 모드 • 키 입력이 바로 명령이 되는 모드로서 쓴 내용을 삭제, 복사 및 붙이기 할 때 사용 • 입력모드 • 실제 문서를 편집하는 모드 • 실제로 화면에 출력되면서 글자의 입력이 가능하게 됨 명령모드 Enter Esc Esc i, a, o, s :, /, ? ex모드 입력모드 [Fig. 1] vi 모드 전환
VI 사용법 • 기본적인 편집명령 • ex모드(콜론 모드) • 라인 에디터인 ex 에디터의 기능을 사용하는 모드 • 특정 패턴들을 특정 문자열로 대체 또는 일괄적으로 처리해야 할 작업 수행
VI 사용법 • 기본적인 편집명령 • vi를 실행시키면 처음에는 명령 모드 상태 • 명령 모드에서 ':' 키를 누르면 ex 모드로 변환 • 'a', 'i' 등의 키를 누르면 입력모드로 전환 • 특정 파일을 편집하기 위해 열려면 vi [filename]을 shell prompt에서 실행 • 이렇게 연 파일을 편집모드로 들어가 편집하려면 'i'를 입력 • 종료하려면 'ESC' 키를 눌러서 명령 모드로 전환 • 'ZZ'나 ':wq'를 누르면 저장하고 나오고 ':q!'를 누르면 저장하지 않고 종료 • 명령 모드에서 'u' 즉' undo 명령으로서 잘못된 명령을 바로 되돌릴(undo)할 수 있다.
VI 사용법 • vi 명령을 실행 • vi 에도 여러 가지 버전이 있어서 약간 씩의 차이가 있다 • vi 에서 가장 어려운 명령어를 먼저 습득 • :q라고 입력 • 'quit' 의 약자 • vi가 다른 '평범한' 문서 편집기와 비교할 때 가장 특이한 점은 프로그램의 상태가 '명령모드'와 '입력모드' 로 구분되어 있다는 점
VI 사용법 • 'i'로 시작하는 내용을 입력해 보자 • 명령모드에서 입력하는 내용을 그림에서는 <>로 표시 • 'i' 키를 누르는 것만으로는 화면에 아무 변화도 없을 것이다. 그 이후에 입력하는 내용이 비로소 화면에 나타난다 • "i"는 '삽입하기(insert)' 명령 • 그 이후에 입력되는 키는 모두 문서의 내용으로 간주, 즉 입력모드로 전환 • 편집 중인 문서를 저장하려면 ':q'만큼이나 그럴 듯한 명령이 존재 <i>when you're weary, <enter>feelin' snail,<esc>
VI 사용법 • 편집 중인 문서를 저장 • ':w' • '파일에 쓰기(write)' 명령 • 주의 <Esc>키 • 입력모드에서 명령모드로 돌아가기 • 현재상태가 입력모드인지 명령모드인지 잘 알 수 없을 경우 • '<Esc>' 키를 누르기 • 입력모드에 있었다면 당연히 명령모드로 바뀜 • 명령모드 였다면 그냥 '삑' 하는 벨 소리 한번 낸다 • vi words.txt 입력 • 좀 전에 입력했던 내용 다음에 계속해서 새로운 내용을 추가 • 'i' 명령 • 현재 커서의 위치에 문자를 집어 넣고 원래 있던 문자는 뒤로 밀어낸다 • 커서의 뒤에 덧붙이는 명령을 써야겠다
VI 사용법 • 'a'키 • '덧붙이기(append)' 명령 • 여기까지 입력하고 일단 명령모드로 돌아가기(어떻게 ?) • :w • 파일이름을 지정하지 않으면 그냥 현재의 이름으로 저장 • :wq • 파일 저장 후 종료 • ZZ • 편집 중인 파일의 내용이 수정되었으면 저장 한 후 종료하고 그렇지 않으면 그냥 빠져 나옴 • o • 현재 커서가 있는 줄의 밑에 새로운 줄을 연다 • O • 현재커서가 있는 줄을 아래로 밀어내고 그 자리에 새로운 줄을 연다 • 지금까지 쓴 명령어 중 일부는 ':' 로 시작되는걸 알 수 있다
VI 사용법 • G • 커서가 어느 위치에 있었건 간에 문서의 마지막 줄의 첫 문자에 가서 대기 • 1G • 문서의 첫 줄의 첫 문자에 커서가 옮겨진다. • 'G' 명령 앞에 붙은 숫자는 줄 번호를 나타냄 • 만일 '3G' 라고 하면 당연히 3번째 줄로 커서가 옮겨간다. • 문제점 • 몇 줄 안 되는 문서야 눈 어림으로 몇 번째 줄인지 알 수 있지만 그렇지 않은 경우는 어떻게 할까? • :set nu • 모든 줄의 앞에 줄 번호가 매겨짐 • 줄 번호가 편하기는 하지만 때로는 보기에 불편할 수도 있다 • 줄 번호를 없애려면 :set nonu
VI 사용법 • w • 커서가 한 단어 오른쪽으로 이동 • 새 단어의 첫 문자에 위치 • 단어 (word)단위로 이동하라는 명령 • b • 이건 거꾸로 (back) 한 단어 이동하라는 명령 • 그런데 이들의 대문자 형태 , 즉 'W' , 'B' 는 어떤 기능을 할까 ? • 한번 시험해보자 • e : 커서 이동명령 • 'w' 와 기능이 유사, 단어의 첫 문자가 아니라 끝(end) 문자에서 멈춘다 • 문서의 첫 줄과 끝 줄 사이를 오가는데 'G' 명령을 사용 • 한 줄의 처음과 끝 사이를 오가는데도 따로 명령이 존재 • ^, $ • '^' 대신 숫자 0을 눌러도 된다. '^' 보다 는 '0' 이 쓰기 편할 것이다
VI 사용법 • H • 커서가 화면의 첫 줄로 날아간다. 이 키는 'high'를 의미 • 'high' 가 있으니 'low' 도 있지 않겠는가? • L • 'H' 'M' 'L' 화면은 그대로이고 커서만 위아래로 이동하는 명령 • 그럼 아예 화면을 옮겨 다니는 명령을 알아보자 • vi에서 화면 : 터미널이 사용자에게 보여주는 특정부분 • 4가지 명령은 모두 '<Ctrl>'키와 함께 쓰인다는 것을 우선 알아두자. 앞과 뒤 방향을 의미하는 forward와 backward 그리고 위와 아래를 의미하는 up와 down 이 네 가지 간단한 단어만 기억하면 된다 • <Ctrl>-f, <Ctrl>-b, <Ctrl>-u, <Ctrl>-d • '<Ctrl>-f' 와 '<Ctrl>-b' 는 한화면 단위 이동 • '<Ctrl>-u' 와 '<Ctrl>-d' 는 반화면 단위로 이동
VI 사용법 • 편집하다 잘못 입력했을 때는 어떻게 할까? • x • 불쌍한 문자 하나를 사형시킨 것이다. 마음이 무겁다고? • u • 'u' 는 명령 취소 '(undo)'를 의미 • 원래 명령취소는 한단계만 지원 (vi 종류에 따라 차이가 있음) • 다시 'u'를 누르면 방금했던 '명령취소' 명령이 취소'재 시행(redo)' • 신나게 x를 눌러댔는데 잘 보니 엉뚱한 곳이었다. 어떻게 하지? • U • 그 줄에 대해서 행해졌던 편집내용이 모두 취소 • 단 편집한 후 커서를 다른 줄로 옮겨가면 정말로 영영 끝남 • 지금까지 작업한 문서가 마음에 안 든다 버리자 • :q • No write since last change (use ! to override) 이게 뭔 소리여? 말인즉슨 수정한 내용을 저장하지 않았으니 그냥은 못 나가겠다
VI 사용법 • :q! • '!'를 써서 '잔말 말고 시키는 대로 하라' • 'u' 명령도 대문자 형태와 쌍을 이룬다 . 'x' 라고 없을 리 없다. • X • 커서가 위치한 곳의 바로 앞 문자가 지워진다 • 커서와 커서가 있던 문자이후의 내용이 한 칸씩 당겨진다 • 지우고 쓰는 걸 한번에 하는 명령은 없을까? • 고치기(change) 명령 'c' 에 대해 알아보자 • cw • 'w'와 'b' 가 어떻게 쓰였는지 생각해보자 • 현재커서가 있는 위치에서 단어 끝까지를 고칠 대상으로 설정
VI 사용법 • C • 현재커서 위치에서 줄의 끝까지 고칠 수 있게 된다. • 만일 한 문자만 바꾸려 한다면 • r (replace) • 현재 커서 위치에 있는 문자를 새로 입력한 문자로 바꾼다. • R • 문자를 바꿔 주고 커서를 하나 다음 문자위로 이동한 후 입력모드를 빠져 나오지 않고 대기 • 다시 문자를 입력하면 새로운 커서 위치의 문자를 바꾼다. 즉 커서가 진행하면서 입력하는 내용으로 원래 있던 내용을 계속 덮어쓴다. 멈추려면 역시 '<Esc>' 키로 입력모드를 빠져 나오면 된다. • 한 문자를 여러 문자로 고치는 경우는 어떨까? • s • 커서가 있는 위치의 한 문자를 지우고 입력모드로 들어간다.
VI 사용법 • 퀴즈? • 한 줄로 이루어진 내용은 두 줄로 분리하려면 어떻게 할까? • 적당한 위치의 공백문자로 가서 'r'을 누른 후 '<Enter>'를 치면 된다 • 공백문자가 아닌 곳에서 나누려면 그냥 'i' 누른 후 '<Enter>'치고 '<Esc>'키로 명령모드로 돌아오면 된다. • 두 줄로 되어 있는 내용을 한 줄로 만들려면? (join)명령 J • dd • 보통 같은 소문자 2개로 이루어진 명령은 커서가 있는 줄 전체에 적용된다? • 한 줄 전체를 깨끗이 날려(delete) 버린다. • D • 현재 커서의 위치에서부터 문장 끝까지의 내용을 지워 버린다 • dG • 현재 커서가 있는 줄부터 끝까지 한꺼번에 보내 버린다. • 그럼 현재 줄부터 처음까지 모두 없애는 건 어떻게 할까 d1G
VI 사용법 • 복사하기 (yank) 기능 • yy • 현재 커서가 있는 줄의 내용이 모두 vi의 내부 버퍼에 임시 저장 • 'y' 명령만으로는 도대체 vi 이놈이 무슨 짓을 했는지 알 수 없다. 커서를 적당한 곳에 옮긴 후 • p • 버퍼에 들어가 있던 내용이 그대로 붙여(put) 진다 • 'i'는 커서가 있는 문자의 앞에 'a' 는 커서가 있는 문자의 뒤에 내용을 입력, 'O'는 커서가 있는 줄의 위에 'o' 는 커서가 있는 줄의 밑에 새로운 줄을 열었다 'p'도 유사한 특성을 갖는데 • P • 커서가 있는 줄의 위에 붙여 넣게 된다.
VI 사용법 • 문자열 치환 • ex 모드에서 다음과 같은 명령 실행 • 예