리눅스 vi 편집기 사용법

계리·2023년 4월 11일
0
post-thumbnail

1. vi 편집기란?

vi는 리눅스 환경에서 가장 많이 쓰이는 문서 편집기로 윈도우에서 메모장 기능을 생각하면 된다.

윈도우는 GUI(Graphical User Interface) 환경으로 마우스 조작이 가능하여 쉽게 사용할 수 있지만 리눅스는 CLI(Command Line Interface) 환경이기 때문에 단축키, 명령어 등을 알아야만 편집을 할 수 있어서 어려움을 많이 느낄 수 있다.


2. 편집기 모드

vi 편집기는 4가지 모드로 구성 되어 있으며 특정 키를 입력해 자유롭게 모드를 변경할 수 있다.

  • 명령모드(Command mode) : 명령어를 입력해 vi의 다양한 기능을 사용할 수 있는 모드
  • 명령라인모드(Command line mode, ex모드(ex mode), 콜론모드 : ':'뒤에 명령어를 입력하여 특수기능을 사용할 수 있는 모드
  • 편집모드, 입력모드(Insert mode) : 메모장과 같은 텍스트를 자유롭게 편집할 수 있는 모드
  • 비주얼모드(Visual mode) : 윈도우의 드래그와 같이 문자를 다중선택할 수 있는 모드


3. vi 편집기 실행

vi 편집기는 기본적으로 vi 파일명으로 실행시킬 수 있지만 아래와 같은 방법을 통해 실행시킬 수도 있다.

  • vi 파일명
    ex) vi.test.sh
  • vi /절대경로/파일명
    ex) vi /folder1/in/test.sh
  • vi 상대경로/파일명
    ex) vi ./in/test.sh

4. vi 편집기 명령어, 단축키

vi 편집기에는 수많은 명령어와 단축키가 있으나 모두 외울 수 없으므로 자신이 주로 사용하는 것 위주로 외우면 된다.

모드전환

  • i : 커서의 위치에 입력모드로 전환
  • l : 커서가 위치한 줄의 맨앞에서 입력모드로 전환
  • a : 커서의 위치에서 뒤로 한칸 이동하여 입력모드로 전환
  • A : 커서가 위치한 줄의 맨뒤에서 입력모드로 전환
  • o : 커서의 위치에서 아래줄을 추가한 뒤 입력모드로 전환
  • O : 커서의 위치에서 윗줄을 추가 한 뒤 입력모드로 전환
  • s : 커서가 위치한 글자를 지우고 입력모드로 전환
  • S,cc : 커서가 위치한 줄을 지우고 입력모드로 전환
  • cw : 커서의 위치에서 오른쪽에 있는 문자를 모두 삭제 후 전환
  • esc : 현재 작업 중인 내용은 종료하고 명령모드로 전환

커서 이동

  • h, ← : 커서의 위치에서 왼쪽으로 한칸 이동
  • l, ← : 커서의 위치에서 오른쪽으로 한칸 이동
  • k, ↑ : 커서의 위치에서 위쪽으로 한줄 이동
  • j, ↓ : 커서의 위치에서 아래쪽으로 한줄 이동
  • [[ : 맨 위쪽 줄로 이동
  • ]] : 맨 아래쪽 줄로 이동
  • { : 이전 문단의 시작점으로 이동
  • } : 다음 문단의 끝지점으로 이동
  • ( : 이전 문장의 시작점으로 이동
  • ) : 다음 문장의 끝지점으로 이동
  • b : 이전 단어의 첫 글자로 이동
  • B : 이전 단어의 첫 글자로 이동(특수문자 무시)
  • w : 다음 단어의 첫 글자로 이동
  • W : 다음 단어의 첫 글자로 이동(특수문자 무시)
  • e : 다음 단어의 끝 글자로 이동
  • E : 다음 단어의 끝 글자로 이동(특수문자 무시)
  • H : 현재 보이는 화면의 맨 위쪽으로 이동
  • M : 현재 보이는 화면의 중간으로 이동
  • L : 현재 보이는 화면의 맨 아래쪽으로 이동
  • 0(숫자), ^ : 커서가 위치한 줄의 맨 처음으로 이동
  • $ : 커서가 위치한 줄의 맨 끝으로 이동
  • '+' : 커서의 위치에서 다음 줄의 맨 처음으로 이동
  • '-' : 커서의 위치에서 다음 줄의 맨 끝으로 이동
  • 3l(숫자3, 소문자 l) : 커서가 위치에서 3번 째 뒤 글자로 이동(숫자 변경 가능)
  • 3H : 현재 보이는 화면의 처음 줄로부터 3줄 아래로 이동
  • 3l : 현재 보이는 화면의 마지막 줄로부터 3줄 위로 이동
  • gg : 파일의 제일 위쪽 줄로 이동
  • G : 파일의 제일 아래쪽 줄로 이동
  • 3G, :3 : 파일의 3번째 줄로 이동
  • ctrl + d : 반 페이지 위로 이동
  • ctrl + u : 반 페이지 아래로 이동
  • ctrl + b : 한 페이지 위로 이동
  • ctrl + f : 한 페이지 아래로 이동
  • 3% : 파일의 3%에 위치한 줄로 이동
  • " : 이전 커서 위치로 이동

삭제

  • x, dl : 커서 위치에 있는 글자 삭제
  • 3x : 커서 위치에 있는 글자포함 3글자 삭제
  • X, dh : 커서 앞에 있는 글자 삭제
  • dw : 커서 뒤에 있는 단어 삭제
  • db : 커서 앞에 있는 단어 삭제
  • dd : 커서가 위치한 줄 삭제
  • 3dd : 커서가 위치한 줄과 아래 2줄 삭제
  • dj : 커서가 위치한 줄과 아래 줄 삭제
  • 3dj : 커서가 위치한 줄과 아래 3줄 삭제
  • dk : 커서가 위치한 줄과 위 1줄 삭제
  • 3dk : 커서가 위치한 줄과 위 3줄 삭제
  • d$, D : 커서의 위치에서 줄 끝까지 삭제
  • d0(숫자0), d^ : 커서의 위치에서 줄 맨 앞까지 삭제
  • :3 d : 파일의 3번째 줄 삭제
  • :3,10 d : 파일의 3번째 줄부터 10번째 줄까지 삭제

복사 / 붙여넣기

  • yy : 커서가 위치한 줄 복사
  • 3yy : 커서가 위치한 줄과 아래 2줄 복사
  • yw : 커서 뒤에 있는 단어 복사
  • 3yw : 커서 뒤에 있는 3개의 단어 복사
  • yb : 커서 앞에 있는 단어 복사
  • 3yb : 커서 앞에 있는 3개의 단어 복사
  • p : 복사한 내용을 커서 뒤에 붙여넣음
  • P : 복사한 내용을 커서 앞에 붙여넣음
  • :3 co 10 : 3번째 줄을 복사하여 10번째 줄 아래에 붙여넣음
  • :1,3 co 10 : 1~3번째 줄을 복사하여 10번째 줄 아래에 붙여넣음
  • :3 m 10 : 3번째 줄을 10번째 줄 아래로 이동
  • :1,3 m 10 : 1~3번째 줄을 10번째 줄 아래로 이동
  • :r hagsig.txt : 커서가 위치한 줄 아래에 hagsig.txt 파일의 내용을 붙여넣음
  • :3 r hagsig.txt : hagsig.txt 파일의 내용을 3번째 줄 아래에 붙여넣음

다중 선택

  • v : 커서를 이동해 글자 단위로 블럭 선택 가능
  • V : 커서를 이동해 줄 전체를 블럭 선택 가능
  • ctrl + v : 마우스 드래그와 같은 형식으로 블럭 선택 가능

다중 선택 중 명령

  • y : 선택한 블럭 복사
  • d : 선택한 블럭 삭제
  • U : 선택한 블럭 안의 소문자를 대문자로 바꿈
  • u : 선택한 블럭 안의 대문자를 소문자로 바꿈
  • ~ : 선택한 블럭 안의 문자를 대소문자로 전환
  • J : 선택한 블럭들의 줄을 합침
  • ':' : 선택한 영역들에 ex명령 실행
  • esc : 블럭 선택 취소

저장 / 불러오기 / 종료 / 최소화

  • :w : 파일의 변경 내용을 저장
  • :w hagsig.txt : 파일의 변경내용을 hagsig.txt이라는 파일 이름으로 저장
  • :w >> hagsig.txt : hagsig.txt 파일에 편집 중인 파일의 내용을 덧붙여서 저장
  • :w! : 파일의 변경 내용을 강제로 저장
  • :q : 파일의 변경 내용을 저장하지 않고 종료
  • :q! : 파일의 변경 내용을 저장하지 않고 강제로 종료
  • :wq 파일 이름 : 저장 후 파일 이름 지정
  • :x, ZZ : 파일의 변경 내용을 저장하고 종료
  • :wq!, :x! : 파일의 변경 내용을 강제로 저장하고 종료
  • :sh : 편집기 최소화(exit: 편집상태로 돌아올 수 있음)
  • :o hagsig.txt, :e hagsig.txt : 편집 중인 파일을 hagsig.txt 파일로 변경
  • :e! : 마지막 저장 내용으로 되돌림
  • :e# : 바로 이전에 열었던 파일을 불러옴
  • :args : 편집 중인 파일 목록 표시
  • :n : 다음 파일 편집
  • :prev : 이전 파일 편집

검색

  • /, :/ : 바로 이전에 검색한 문자를 정방향으로 검색
  • ?, :? : 바로 이전에 검색한 문자를 역방향으로 검색
  • :/hagsig : hagsig이라는 문자를 정방향으로 검색
  • :?hagsig : hagsig이라는 문자를 역방향으로 검색
  • :/hagsig/=, :?hagsig?= : hagsig이라는 문자가 위치한 줄 번호 표시

검색 중 명령

  • n : 검색한 문자가 여러 개일 경우 다음 문자 검색
  • N : 검색한 문자가 여러 개일 경우 이전 문자 검색

문자 수정

  • r : 커서가 위치한 글자 하나를 입력한 값으로 수정
  • r _ enter : 커서가 위치한 글자 하나를 지우고 줄 바꿈
  • xp : 커서가 위치한 글자 하나아 다음 글자의 위치를 바꿈
  • :s/tistory/hagsig : 커서가 위치한 줄에서 tistory를 hagsig으로 수정
  • :%s/tistory/hagsig : 파일 전체에서 tistory를 hagsig으로 수정
  • :1,3 s/tistory/hagsig : 파일의 1~3줄에서 tistory를 hagsig으로 수정
  • 1, s/tistory/hagsig : 파일의 1~현재줄까지 tistory를 hagsigdmfh 수정
  • :g/tistory/s//hagsig/gc : tistory라는 문자를 hagsig으로 수정할지 물어봄`

문자 수정 시 옵션

  • g : 문자 수정 범위를 파일 전체로 잡음(global)
  • c : 문자 수정 여부를 물어봄(confirm)
  • i : 문자 수정 시 대소문자를 구분하지 않음(ignore-case)

예시

  • :%s/old/new : 각 행의 처음 나오는 old를 찾아 new로 바꾼다
  • :%s/old/new/g: 모든 old를 찾아 new로 바꾼다
  • :%s/old/new/gc: 모든 old를 찾아 new로 바꾸기 전에 물어본다.
  • :%s/tistory/hagsig/ig : 파일 전체에서 대소문자를 구별하지 않고 문자 수정
  • :1,3 s/tistory/hagsig/c : 문자 수정 여부를 물어본 뒤 처리
  • :%s/tistory/hagsig/igc : 파일 전체에서 대소문자를 구변하지 않고 질의 후 문자 수정

화면 분할

  • ctrl + w + s, :sp, :split : 현재 편집창을 두 개의 수평 창으로 나눔
  • ctrl + w +n, :new : 새로운 수평 편집창 생성
  • ctrl + w + ^ : 새로운 수평 편집창에 이전 파일을 표시(다중 편집 시 가능)
  • ctrl + w + q, ctrl + w +c, :q, :close : 커서가 위치한 창을 닫음
  • ctrl + w + o : 커서가 위치한 창만 남기고 모든 창을 닫음
  • ctrl + w + j : 커서가 위치한 창의 아래쪽 창으로 커서 이동
  • ctrl + w + k : 커서가 위치한 창의 위쪽 창으로 커서 이동
  • ctrl + w + w : 순차적으로 커서를 다음 창으로 이동(정방향)
  • ctrl + w + W : 순차적으로 커서를 다음 창으로 이동(역방향)
  • ctrl + w + p : 바로 이전에 커서가 위치 했던 창으로 커서 이동
  • ctrl + w + t : 제일 위에 있는 창으로 커서 이동
  • ctrl + w + b : 제일 아래에 있는 창으로 커서 이동
  • ctrl + w + r : 순차적으로 커서가 위치한 창과 다음 창을 바꿈(정방향)
  • ctrl + w + x : 바로 이전에 커서가 위치 했던 창과 현재 창의 위치를 바꿈
  • ctrl + w + J : 커서가 위치한 창을 제일 아래쪽 창으로 이동
  • ctrl + w + K : 커서가 위치한 창을 제일 위쪽 창으로 이동
  • ctrl + w + = : 창의 크기를 모두 동일하게 바꿈
  • ctrl + w + _ : 커서가 위치한 창을 최대 크기로 바꿈
  • ctrl + w + + : 커서가 위치한 창의 크기를 한줄 만큼 증가
  • ctrl + w + - : 커서가 위치한 창의 크기를 한줄 만큼 감소
  • ctrl + w + 3+ : 커서가 위치한 창의 크기를 3줄 만큼 증가
  • ctrl + w + 3- : 커서가 위치한 창의 크기를 3줄 만큼 감소

기타

  • u : 이전으로 되돌리기 (Undo)
  • ctrl + r : 되돌리기한 것을 다시 실행 (Redo)
  • :set number: 행번호를 출력 (간단하게 :set nu)
  • :set nonumber: 행번호를 숨긴다. (간단하게 :set nonu)
  • :cd: 현재 디렉토리를 출력
  • := : 현재 편집 중인 파일이 총 몇 줄인지 표시
  • :!명령어 : 편집기에서 시스템 명령어를 사용(예시 :!ifconfig)
  • << : 커서가 위치한 줄 맨 앞의 탭 제거
  • >> : 커서가 위치한 줄 맨 앞에 탭 제거

참조

profile
gyery

0개의 댓글