vi editor cheat sheet / vi 명령어 정리
2019. 12. 8. 11:51ㆍcoding
Editor
- UNIX에서의 파일 편집
- cat 명령
- 간단한 화일의 작성 시 사용 (cat > myfile)
- 화일 작성 마칠 때는 ctrl + D
- 화일의 내용 중 일부만 수정할 수 가 없음
- editor 사용
- 화일의 내용을 편리하게 편집
- 메모리 버퍼를 사용해서 파일 저장 (작성을 마친 후에 저장, 취소 가능)
- cat 명령
Why use vi?
- very powerful
- useful simple subset of commands
- portable (PCs, mainframes, etc)
- designed for slow networks
- full-screen
- vi [options] filelist
Introduction to vi
- Modes of Operation
- The work Buffer
- During the editing session, vi make all changes in the buffer
- Advantage : 오동작으로 원하지 않은 결과가 발생했을 때, 파일에 저장되지 않도록 할 수 있다.
- Disadvantage : 시스템이 다운될 경우, 편집한 결과가 모두 소멸될 수 있다.
Vi Modes
Command & input mode
- 명령 모드
- 사용자가 입력한 내용이 vi의 명령어로 인식됨
- vi를 처음 시작하면 명령 모드
- 커서의 이동이나 기타 편집 명령
- colon (:) 을 누르면 ex 명령 사용 가능
- 입력 모드
- 사용자가 입력한 내용이 화일에 쓰여짐
- ESC를 누르면 명령 모드로 복귀
- 변경 모드, colon 모드를 따로 구분하기도 함
vi 시작하기
- vi - 새로운 파일 시작 (파일 저장할 때 이름 지정)
- vi filename - 지정한 이름이 없으면 새로운 파일 생성, 지정한 이름이 있으면 기존 파일 열기
- Bottom line is the status line
- Some, but not all, commands are shown on the status line
- Often you type a command and nothing appears on the screen
- 엔터키를 눌러야 하는 경우
- colon 명령 (:q! 등)
- 검색 명령 (/text 등)
- 엔터키가 필요 없는 경우
- 문자로 시작하는 명령어 (ZZ, G..)
- 제어 문자로 시작하는 명령어 (^L..)
저장 및 종료하기
- 저장 명령 : ESC를 눌러 명령모드로
- :w + return → 현재의 파일명으로 파일 저장
- :w filename + return → 지정한 파일명으로 파일 저장
- 종료 명령 : 저장 후 종료 또는 그냥 종료
- :q + return → 작업 내용을 저장하였으면 종료
- :q! + return → 작업 내용을 저장하지 않고 종료
- :wq + return → 작업 내용을 저장한 후 종료
- :wq filename + return → 작업 내용을 지정한 파일명으로 저장한 후 종료
- ZZ + return → 작업 내용을 저장한 후 종료
.exrc File / Mapping
- When vi starts, it reads the .exrc file in home directory, if it exits.
- Use this file to customize vi with any options (set options like autoindent, nu..), abbreviations or key-command maps you always want to use
- To save frequently used command sequence to a shortcut, use **:map x** sequence, :map will display all currently mapped characters (?)
Vi Commands
**i (Insert)**
- i → Insert Before Cursor (커서 한칸 전에 삽입)
- I (Shift + i) → Insert at Beginning (줄 제일 앞에 삽입)
**a (Append)**
- a → Append after cursor (커서 한칸 뒤에 삽입)
- A (Shift + a) → Append at end (줄 제일 뒤에 삽입)
o (New Line)
- o → Add after line (커서가 있는 줄 바로 다음줄에 새로운 줄 추가)
- O (Shift + o) → Add before line (커서가 있는 줄 바로 전줄에 새로운 줄 추가)
Cursor Moving
- k / ↑: 한 줄 위로 이동
- j / ↓: 한 줄 밑으로 이동 (내려갈 칸에 입력한 내용이 없으면 그 전에 입력한 내용이 있는 칸까지 이동, 아예 없으면 맨 앞으로 이동)
- l / > / spacebar : 한 칸 오른쪽으로 이동 (빈 줄에서는 안움직임..?)
- h / < / backspace : 한 칸 왼쪽으로 이동 (빈 줄에서는 안움직임..?)
- ^ (shift + 6) / 0 : 커서가 있는 줄 맨 앞칸으로 이동
- $ (shitf + 4) : 커서가 있는 줄 맨 뒷칸으로 이동 (글자 있는 칸까지만)
-
- : 윗 줄의 처음으로 이동 (글자 있으면 맨 첫글자 있는 칸, 없으면 맨 앞칸)
-
- / Enter : 다음 줄의 처음으로 이동 (글자 있으면 맨 첫글자 있는 칸, 없으면 맨 앞칸)
- H (Shift + h) : 화면 맨 위 맨 첫칸으로 이동
- M (Shift + m) : 화면 중앙의 맨 첫칸으로 이동 (입력한 내용의 중간)
- L (Shift + l) : 화면 맨 밑의 맨 첫칸으로 이동 (마지막 입력줄 맨 첫칸)
- w : 다음 단어의 첫 문자로 이동
- b : 이전 단어의 첫 문자로 이동
- e : 다음 단어의 끝 글자로 이동
- :(n) + enter / (n)G : n번째 줄 첫 문자로 이동
- :$ / G : 파일 가장 마지막 줄의 첫 문자로 이동
- (n)+ / (n)- : n 줄 앞/뒤의 첫 문자로 이동
- ( : 현재 문장의 맨 첫칸으로 이동
- ) : 다음 문장의 맨 첫칸으로 이동
- { : 현재 문단의 처음 빈칸으로 이동
- } : 다음 문단의 처음 빈칸으로 이동
-
- (minus sign) : 윗 줄의 맨 앞칸으로 이동
-
- (plus sign) : 다음 줄의 맨 앞칸으로 이동
Scroll Command
- ^u (control + u) : 반 화면 위로 이동
- ^d : 반 화면 아래로 이동
- ^b : 한 화면 위로 이동
- ^f : 한 화면 아래로 이동
- ^y : 한 줄만 위로 (화면을 이동)
- ^e : 한 줄만 아래로 (화면을 이동)
- ^l : 파일 내용 다시 출력
Delete Command
- x / (n)x : 커서 위치의 문자 (커서로부터 n개) 삭제
- dw / (n)dw : 커서 위치의 단어 (커서로부터 n개 단어, 공백은 한단어로) 삭제
- dd / (n)dd : 커서 위치의 줄 전체 (커서로부터 n개 줄) 삭제
- D (shift + d) : 커서 위치 문자부터 줄의 제일 끝까지 삭제
Undo Command
- u : 방금 수행한 명령 취소 (줄에 상관 없이)
- U : 해당 줄의 모든 편집 취소 (바꾼 횟수 상관 없이)
Editing Command
- r : 현재 커서 위치의 한 문자 변경 (r + 문자 입력 → 명령모드 유지)
- R : 현재 커서 위치부터 문자열 변경 (Replace 모드로 변경 → ESC 입력 전까지 계속 변경 가능)
- cw : 커서 위치부터 현재 단어의 끝까지 내용 변경 (커서 위치의 단어가 삭제되고 insert 모드로 변경)
- cc : 커서가 위치한 줄의 내용 변경 (커서가 있는 줄 다 삭제되고 insert 모드로 변경)
- s / (n)s : 현재 커서부터 내용 변경 (커서 위치의 문자 n개가 삭제되고 insert 모드로 변경)
- C (Shift + c) : 커서 위치에서부터 줄 끝까지 내용 변경 (커서 위치부터 줄 끝까지 삭제되고 insert 모드로 변경)
- y / (n)yy : 커서로부터 현재 행 (n개) 을 버퍼로 복사
- p : 현재 행 바로 밑에 버퍼 내용을 삽입
- P (Shift + p) : 현재 행 바로 윗줄에 버퍼 내용을 삽입
- dd / (n)dd : 커서 위치의 줄 전체 잘라내기 (행 삭제와 잘라내기는 동일한 동작)
버퍼에 저장
- "buffernameyy : 현재 행부터 아래로 n줄을 [buffername] 버퍼에 저장
- "[buffername]p : buffername 내용을 바로 아래줄에 붙여넣기
범위 지정 명령
- 1,$ / % : 첫 줄에서 마지막 줄까지 지정 (파일 내의 모든 줄)
- 1,. : 첫 줄에서 현재 줄까지 지정
- .,$ : 현재 줄에서 마지막 줄까지 지정
- .-(n) : 현재 줄에서 n줄 위의 줄만 지정
- (n1),(n2) : n1번째 줄에서 n2번째 줄까지 지정
복사와 잘라내기
- :(n)y : n번째 행을 복사
- :<범위>y : 범위로 지정한 행을 복사
- :(n)d : n번째 행을 잘라내기
- :<범위>d : 범위로 지정한 행을 잘라내기
- :pu : 현재 행 다음에 버퍼 내용을 붙여넣기
- :(n)pu : n번째 행 다음에 버퍼 내용을 붙여넣기
Search Commands
- /문자열 : 현재 위치부터 파일 앞쪽으로 → 문자열을 탐색
- ?문자열 : 현재 위치부터 파일 뒤쪽으로 ← 문자열을 역방향 탐색
- n : 다음 문자열 탐색 →
- N : 역방향으로 문자열 탐색 ←
Changing Commands
- :s/문자열1/문자열2/ : 커서가 위치한 줄에서만 문자열 1을 문자열2로 바꿈 (전체를 다 찾아서 바꾸지는 않음, 첫번째 문자열만 변경)
- :<범위>s/문자열1/문자열2/ : <범위> 안의 모든 줄에 대해서 각 줄의 첫번째 문자열1을 찾아 문자열2로 바꿈
- :<범위>s/문자열1/문자열2/g : <범위> 안의 모든 줄에 대해서 모든 문자열1을 문자열2로 바꿈 (전부 다 바꿈)
- :<범위>s/문자열1/문자열2/gc : <범위> 안의 모든 줄에 대해서 각각의 문자열1을 문자열2로 치환할 때 수정할 지 안할지를 물어본다
기타 기능
- :r <filename> : 지정한 파일을 현재 커서 위치에 삽입
- :e <filename> : 현재 파일 대신 지정한 파일을 읽음
- :n : Vi 시작 시 여러 파일을 지정하였을 경우 다음 파일로 이동
- :!<명령> : vi를 잠시 중단하고 지정한 명령 수행 → 돌아올 때는 enter key
- :sh : vi를 잠시 빠져나가서 쉘을 수행 → 돌아올 때는 exit 입력
- :f <filename> : 파일 이름을 지정한 이름으로 변경
- :w %.old : 현재 파일을 .old 이름으로 저장
- control + g : 기본적인 파일 정보 출력 (파일명, 라인 수)
- J : 현재 줄 뒤에 바로 다음줄을 잘라내서 붙여넣기 (한 칸 띄우고)
- . : 바로 이전에 수행한 명령을 실행
- ~ : 현재 커서 위치의 한 문자를 소문자 혹은 대문자로 전환
환경 설정
- :set nu : 파일 내용의 각 줄에 줄 번호 표시 (보이기만 하고 저장되지는 않음)
- :set nonu : 줄 번호 취소
- :set list : 눈에 보이지 않는 특수문자 표시 (Tap은 ^I로 표시, 줄의 마지막에는 $ 표시)
- :set nolist : 특수문자보기 기능 취소
- :set showmode : 현재 모드 표시
- :set noshowmode : 현재 모드 표시기능 취소
- :set : set으로 설정한 모든 vi 변수 출력
- :set all : 설정 가능한 모든 vi 변수와 현재 값 출력
'coding' 카테고리의 다른 글
UNIX 외워둬야 할 명령어들 총정리 (0) | 2019.12.08 |
---|---|
File Directory & Linking Files (0) | 2019.12.08 |
Linux Shell 명령어 정리 (0) | 2019.12.08 |
styled-component 와 css 잘 사용하기 (0) | 2019.12.08 |
[C 프로그래밍] 주소록 프로그램 만들기 (0) | 2019.06.13 |