vi 편집기란?
vi는 빌 조이가 만든 UNIX계열 환경에서 가장 많이 쓰이는 오픈 소스 문서 편집기로 한 줄씩 편집하는 줄단위 편집기가 아니라 한 화면을 편집하는 'Visual Editor'라는 뜻에서 유래하였습니다.
vi와 vim의 차이?
vim은 'VI Improved'의 약자로 향상된 vi를 의미하는데, vi의 경우 간결한 텍스트 편집기능만을 제공하는 반면에 vim은 확장된 정규표현식 문법, 문법 강조기능, 다중 되돌리기 등 vi보다 확장된 기능을 제공합니다.
대다수의 unix와 linux배포판의 경우 vim이 설치되어 있는 것을 볼 수 있는데, 이는 내부적으로 vi를 alias설정하여 vi를 열어도 vim이 열리도록 세팅되어 있습니다. 따라서 현재로선, 굳이 vi와 vim을 별도로 구분하여 알 필요는 없어보입니다.
vi 편집기 3가지 모드
- 일반모드 : 화살표 이동이나 특정 문자 수정/삭제 및 편집에 쓰이는 대부분의 명령어가 여기서 실행됩니다. 이 모드가 기본 모드 형태입니다.
- 입력모드 : 일반모드에서 i(현 커서 위치에서 입력모드), a(현 커서 위치에서 한 칸 뒤에서 입력모드), o(현 커서 위치에서 한 칸 아래 한 줄 추가 및 입력모드)등을 입력했을 때 자동으로 들어가는 모드로, 이 상태에서만 텍스트 입력이 가능합니다.
명령키 | 기능 |
i (insert) | 커서 앞에 입력 (현재 커서 자리에 입력) |
a (add) | 커서 뒤에 입력 (현재 커서 다음자리에 입력) |
o (open) | 커서가 위치한 행의 다음행에 입력 |
I (대문자) | 커서가 위치한 행의 첫 칼럼으로 이동하여 입력 |
A (대문자) | 커서가 위치한 행의 마지막 칼럼으로 이동하여 입력 |
O (대문자) | 커서가 위치한 행의 이전 행에 입력 |
- 명령모드 : 시스템과 관련된 부분을 담당하는 모드. 일반 모드에서 ':(콜론)'을 누르면 됩니다. 다음 명령을 사용할 수 있으며, 뒤에 느낌표를 붙이면 강제명령으로 실행됩니다.
vi 편집기로 문서편집 시 진입 및 모드 변환 형태
$ vi {파일명} # -> 일반모드로 진입
# 그러면 자동으로 일반모드에서 현재 커서 위치 확인 후 'a'같은 입력모드 누르면 입력모드 진입
# 입력모드에서 작성 및 수정 완료 후 'esc'를 눌러서 일반모드로 진입
# ' :(콜론) '을 입력하여 명령모드로 진입하고 w(저장),q(취소),i(취소),wq(저장 후 종료) 입력 후 ENTER클릭
# 참고로 무언가 잘못 작성했을 경우 일반모드에서 u(소문자)를 눌러 되돌린후 명령모드에서 'q'입력 후 ENTER클릭
# 혹은 명령모드에서 ':q!' 강제로 취소종료하면 됩니다.
* vi의 비정상 종료시 swp파일이 남음 -> ls -a로 숨긴파일을 확인하여 swp파일 확인 -> 삭제
vi 명령어 모음
- vi 시작 명령어
명령어 | 설명 | 예시 |
vi {파일명} | 파일열기, 작성 | vi test.txt |
vi + {행번호} {파일명} | 파일을 열고, 입력한 행으로 커서 이동 | vi -100 test.txt |
vi + /"{검색 문자열}" {파일명} | "문자열"의 처음발생 단어부터 열기 | vi -/"afile" test.txt |
vi -r {파일명} | 손상된 파일 회복 | vi -r test.txt |
view {파일명} | 읽기 전용으로 열기 | view test.txt |
"입력한 파일명이 존재할 경우 그냥 파일을 열기가 되는데 입력한 파일명이 실제 존재하지 않을 경우 빈 파일을 열게되며 그냥 ':q'로 종료하면 파일을 생성하진않지만 내용을 작성하게되면 해당 파일명으로 새로운 파일을 생성하게 되니까 이점 유의해서 확인하기"
- vi 커서 이동
커서 | 설명 |
h ( ← ) | 왼쪽으로 커서 이동 |
j ( ↓ ) | 아래로 커서 이동 |
k ( ↑ ) | 위로 커서 이동 |
l ( → ) | 오른쪽으로 커서 이동 |
w | 오른쪽 한 단어의 끝 부분으로 커서 이동 |
e | 오른쪽 한 단어의 앞 부분으로 커서 이동 |
b | 왼쪽 한 단어의 앞 부분으로 커서 이동 |
Enter | 한 행 아래로 커서 이동 |
Backspace | 한 문자 왼쪽으로 커서 이동 |
Spacebar | 한 문자 오른쪽으로 커서 이동 |
^ | 행의 맨 왼쪽으로 커서 이동 |
$ | 행의 맨 오른쪽으로 커서 이동 |
H | 화면 맨 위로 이동 |
M | 화면의 중간으로 이동 |
L | 화면의 맨 아래로 이동 |
숫자G | 입력한 '숫자' 만큼 지정한 줄 맨 앞으로 커서 이동 |
Ctrl + i | 한 화면 위로 이동 |
Ctrl + b | 한 화면 아래로 이동 |
Ctrl + d | 반 화면 위로 이동 |
Ctrl + u | 반 화면 아래로 이동 |
Ctrl + e | 한 줄씩 위로 이동 |
Ctrl + y | 한 줄씩 아래로 이동 |
* 익숙해지면 편하긴 할 것 같은데, 개인적으로도 솔직히 그냥 방향키가 편하긴 합니다.
- 텍스트 변경 명령어
명령어 | 설명 |
cw | 단어 변경 |
cc | 행 변경 |
C (대문자) | 커서 오른쪽의 행 변경 |
s | 커서가 위치한 문자열 대체 |
S (대문자) | 커서가 위치한 라인의 문자열 대체 |
r | 커서 위치 문자를 다른 문자로 대체 |
r-Enter | 행 분리 |
J (대문자) | 현재 행과 아래 행 결합 |
xp | 커서 위치 문자와 오른쪽 문자 교환 |
~ | 문자형(대, 소문자) 변경 |
u | 이전명령 취소 (윈도우에서 Ctrl+z 라고 생각하면 편하다) |
U (대문자) | 행 변경 사항 취소, 이전의 최종 행 취소 |
. | 이전 최종 명령 반복 |
Ctrl + r | 이전명령 복구 (윈도우에서는 Ctrl+y 라고 생각하면 편하다) |
- 텍스트 삭제 명령어
명령어 | 설명 |
x | 커서가 있는 문자 삭제 |
nx | 커서가 있는 위치부터 n개의 문자를 삭제 |
dw | 현재 커서에 있는 한 단어 삭제 |
dd | 커서가 있는 라인 삭제 |
ndd | 커서가 있는 라인부터 n개의 라인 삭제 |
db | 커서의 위치에서 거꾸로 한 단어 삭제 |
D | 커서 오른쪽 행 삭제 |
:5,10d | 5~10번째 행 삭제 |
* 개인적으로는 dd 명령어를 가장 많이 사용하는 것 같다.
- 복사 및 이동 명령어
명령어 | 설명 |
yy | 커서가 위치한 줄 복사 |
y | 행 yank 또는 복사 |
yh | 커서의 왼쪽 문자 복사 |
yl | 커서에 위치한 문자 복사 |
yi | 커서가 위치한 줄과 그 아랫줄 복사 |
yk | 커서가 위치한 줄과 그 윗줄 복사 |
p | yank되거나 삭제된 행 현재 행 위로 삽입 |
P (대문자) | yank되거나 삭제된 행 현재 행 아래로 삽입 |
:1,2 co 3 (띄어쓰기 있음) | 1~2행을 3행 다음으로 복사 |
:4,5 m 6 (띄어쓰기 있음) | 4~5행을 6행 위로 이동 |
* yank : 홱 잡아당기다.
- 한줄 복사
해당 라인에서 'yy' 누르면 캐시에 저장. 붙여넣기를 원하는 곳으로 이동하여 'p'를 누르면 커서 다음 라인에 붙여넣기가 됨
- 블럭 복사
'v'키를 누른 후 커서를 이동하여 블럭을 설정. 원하는 부분을 블럭으로 설정한 뒤(설정 완료키는 없음) 'y'키를 누르면 캐시에 복사가 됨. 같은 방법으로 원하는 곳으로 이동하여 'p'를 누르면 커서 다음 라인에 붙여넣기가 됨
" 저도 글 작성하기위해서 자세히 공부하면서 처음알았는데, 개인적으로는 그냥 드래그해서 ctrl+insert로 복사하고 다시 shift+insert로 붙여넣기 하는 방법으로도 충분하지않을까 싶습니다. "
- 행 번호 설정 명령어
명령어 | 설명 |
:set nu 또는 :set number | 편집기의 각 행의 좌측에 행 번호 표시 |
:set nonu | 편집기의 각 행의 좌측 행 번호 숨기기 |
- 행 찾기 명령어
명령어 | 설명 |
G | 파일의 마지막 행으로 가기 |
12G | 파일의 12번째 행으로 가기 |
Ctrl + G | 현재 file name과 커서의 라인 정보 |
- 탐색 및 대체 명령어
명령어 | 설명 |
/{검색할 문자열} | 오른쪽 아래 방향으로 문자열 검색 |
?{검색할 문자열} | 왼쪽 위 방향으로 문자열 검색 |
n | 문자열의 다음으로 계속 검색 |
N (대문자) | 문자열의 이전으로 계속 검색 |
:g/search-string/s/ | 각 발생 탐색 후 확인하고 대체 |
:s/string/rep | 현재 향의 str을 rep로 대체 |
:1,.s/string/rep | 1부터 현재 행의 str을 rep로 대체 |
:%s/string/rep/g | 파일 전체 str을 rep로 전부 대체 |
:.$/aaa/bbb | 커서의 위치로부터 파일의 끝까지 있는 모든 aaa를 bbb로 대체 |
- 화면 정리 명령어
명령어 | 설명 |
Ctrl + l | 불필요한 화면정리 후 다시 표시 |
- 파일 명령어
명령어 | 설명 | 예제 |
:r {파일명} | 커서 다음에 파일 삽입 | :r test.txt |
:{행번호} r {파일명} | 입력한 파일을 입력한 행번호 다음에 삽입 | :10 r test.txt |
- 보관 및 종료 명령어
명령어 | 설명 |
:w | 변경사항 저장 |
:w {파일명} | 변경사항 입력한 파일명으로 저장 |
:wq | 변경사항 보관후 vi종료. ZZ명령과 같음. :w(기록)과 :q(종료)를 연속적으로 수행 |
:ZZ | 변경사항 보관후 vi종료. 임시 버퍼의 내용을 vi로 호출할 때 사용되었던 파일에 기록한 후 vi 빠져나옴 |
:q! | 변경사항 보관하지않고 종료 |
:q | 수정한 파일을 저장하지 않고 종료 |
:e! | 수정한 것을 무시하고 다시 편집상태로 |
- 기타
문자 | 설명 |
. | 현재 line |
% | 전체 line |
$ | 파일 맨끝 line |
1,$ | % |
2,3 | 2~3 line |
- 명령어 단축키 모음
* 저도 공부하면서 제가 모르는 명령어가 많아서 앞으로 사용하면 좋을 법한 명령어들도 몇개보이네요.
※ 빨간 글씨는 개인적으로 자주 사용하는 명령어를 표시한 것 입니다.
'개인 공부 > 정보 보관함' 카테고리의 다른 글
WINDOW 설치 시 사용한 USB(ESD-USB) 원래대로 복구하기 (0) | 2024.09.24 |
---|---|
[LINUX]백엔드 개발자가 자주 사용하는 리눅스 명령어 (1) | 2024.06.27 |
[LINUX] vi 편집기를 이용해 문서 전체에서 문자 일괄 변경 (0) | 2024.06.19 |
[LINUX] 포트 오픈 확인 (0) | 2024.06.19 |
[Network] 라우팅(Routing) (1) | 2024.06.03 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!