구조
- 대기 모드, 입력 모드, command line 모드
저장과 종료
[root@localhost ~]# cp /etc/passwd aaa
cp: overwrite 'aaa'? y
[root@localhost ~]# which vi
/usr/bin/vi
[root@localhost ~]# ls -l /usr/bin/vi
-rwxr-xr-x. 1 root root 1180488 6월 18 2020 /usr/bin/vi
[root@localhost ~]# which vim
/usr/bin/vim
[root@localhost ~]# vim aaa
esc → u 되돌리기 undo
esc → :q 에디터 종료
esc → :q! 에디터 강제 종료 (보통 파일 수정 후 내용을 저장하지 않고 종료할 때 사용) ! 는 강제 의미를 갖는다.
esc → :w [다른 파일 이름] 다른 이름으로 파일 저장
esc → :wq 저장하고 종료
esc → :x 저장하고 종료
esc → shift + z + z 저장하고 종료
입력
i 현재 커서 위치에서 입력이 가능해진다.
a 현재 커서 뒤로 입력이 가능해진다.
s 현재 커서에 있는 문자를 지우고 입력이 가능해진다. 4 s 이런식으로 4개 문자 삭제하고 입력 모드로 넘어갈 수 있다.
o 현재 커서가 있는 위치 아래로 공백라인을 확보하고 하고 입력이 가능해진다.
I 현재 커서가 있는 문자열의 맨 앞으로 커서가 이동하고 입력이 가능해진다.
A 현재 커서 위치에서 마지막 문자열로 커서가 이동하고 입력이 가능해진다.
S 현재 커서가 있는 위치의 문자열을 지우고 입력이 가능해진다.
O 현재 커서가 있는 위치 위로 공백라인을 확보하고 입력이 가능해진다.
복사 / 붙여넣기
yw (1y 1w == 1x1 yw 한 단어를 복사) 단어를 복사, 6단어를 복사하고 싶다 2y3w == 6yw
yy 라인을 복사 5yy ⇒ 5 line 을 복사
y^ 현재 커서의 앞부분을 복사
y$ 현재 커서의 뒤쪽을 복사
yH 현재 커서가 있는 라인부터 화면에 보이는 윗 부분까지 복사
yL 현재 커서가 있는 라인부터 화면에 보이는 아랫 부분까지 복사
ygg 현재 커서가 있는 라인 부터 파일의 가장 윗 부분까지 복사
yG 현재 커서가 있는 라인 부터 파일의 가장 아랫 부분까지 복사
[주의 : 복사 잘라내기 붙여넣기 삭제 는 모두 대기모드 진행한다.]
yank y ------> 이동 ---> p paste
nymw (n,m 은 숫자 곱하기로 이루어진다.)
yw 단어를 복사 1y1w ==1x1 yw 2y3w == 6yw
yy 라인을 복사 5yy 현재 커서가 있는 라인을 포함하여 아래로 5라인을 복사
y^ 커서가 있는 앞쪽으로 복사
y$ 커서가 있는 뒤쪽으로 복사
yH 커서가 있는 라인 부터 화면에 보이는 윗 부분 까지 복사
yL 커서가 있는 라인 부터 화면에 보이는 아랫 부분 까지 복사
ygg 커서가 있는 라인 부터 파일의 가장 윗 부분 까지 복사
yG 커서가 있는 라인 부터 파일의 가장 아랫 부분 까지 복사
:n,my n번째라인부터 m번째 라인까지 복사
ex) :10,20y
잘라내기 / 붙여넣기
cw(1y 1w == 1x1 yw 한 단어를 복사) 단어를 잘라내기, 6단어를 잘라내고 싶다 2c3w == 6cw
cc 라인을 잘라내기
c^ 현재 커서의 앞부분을 잘라내기
c$ 현재 커서의 뒤쪽을 잘라내기
cH 현재 커서가 있는 라인부터 화면에 보이는 윗 부분까지 잘라내기
cL 현재 커서가 있는 라인부터 화면에 보이는 아랫 부분까지 잘라내기
cgg 현재 커서가 있는 라인 부터 파일의 가장 윗 부분까지 잘라내기
cG 현재 커서가 있는 라인 부터 파일의 가장 아랫 부분까지 잘라내기
삭제
x 현재 커서의 뒤 문자를 삭제, 5x -> 5개의 문자를 삭제
X 현재 커서의 앞 문자를 삭제
단어와 라인삭제
dw(1y 1w == 1x1 yw 한 단어를 복사) 단어를 삭제, 6단어를 삭제하고 싶다 2d3w == 6dw
dd 라인을 삭제
d^ 현재 커서의 앞부분을 삭제
d$ 현재 커서의 뒤쪽을 삭제
dH 현재 커서가 있는 라인부터 화면에 보이는 윗 부분까지 삭제
dL 현재 커서가 있는 라인부터 화면에 보이는 아랫 부분까지 삭제
dgg 현재 커서가 있는 라인 부터 파일의 가장 윗 부분까지 삭제
dG 현재 커서가 있는 라인 부터 파일의 가장 아랫 부분까지 삭제
이동
^ 현재 커서가 놓인 라인의 맨 앞으로 이동
$ 현재 커서가 놓인 라인의 맨 뒤로 이동
gg 맨 윗줄로 이동
G 맨 아랫줄로 이동
:[숫자] command line 모드에서 숫자를 지정하면 해당 라인으로 이동
:n, my n 번째 라인부터 m 번째 라인까지 복사
:n, md
:n, mc
검색
/ 현재 커서 위치의 아래부터 검색
? 현재 커서 위치의 위부터 검색
/단어 (정규 표현식으로 검색 가능) esc → n 아래로 검색된 내용 확인, esc → N 위로 검색된 내용 확인
?단어 (정규 표현식으로 검색 가능) esc → n 아래로 검색된 내용 확인, esc → N 위로 검색된 내용 확인
치환
:n, ms/찾고자하는 단어(정규 표현식 가능)/바꾸려는 단어(정규 표현식 가능)
:10, 20s/nlogin/hahaha/g ← 한 번에 모두 변경
:10, 20s/nlogin/hahaha/gc ← 선택해서 변경 가능
ex):1, $s/nologin/hahaha/g
:1, $s/hahaha/nologin/gc === :s/hahaha/nologin/gc
:argdo, %s/hahaha/nologin/g | update 다중 파일 오픈 시 패턴을 정의해서 한 번에 파일을 변경
y 바꾼다.
n 안바꾼다.
a 나머지 모두 바꾼다.
q 커서 위치의 문자를 바꾸지 않고 종료한다.
l 커서 위치의 문자까지만 바꾸고 종료한다.
^E ^Y 변경을 하다가 아래 위로 변경하고자 하는 부분을 찾아볼 때 사용, 변경 하는 것이 아니다.
vim 환경 세팅
cd ~ 로 이동 하고 vim .vimrc 파일을 생성한다. rc 는 Run Controll 이라는 뜻일 것이다... 아마도..
.vimrc 에는 vim 에 관련된 환경값들이 들어온다.
set autoindent 는 indent를 다음줄에도 유지하게 하는 설정이다.
set nu 는 편집기에 line 수가 나오도록 한다.
다중 편집
cp /etc/passwd aaa
cp /etc/passwd ccc
vim aaa ccc ⇒ aaa 파일과 ccc 파일을 동시에 연다.
다중 파일 오픈 시 :n 과 :N 을 이용하여 다음 파일로 이동이 가능하다.
aaa 파일이 오픈되고 :n 하면 ccc 파일이 오픈되고, ccc 파일에서 :N 하면 aaa 파일이 오픈된다.
만약 3개 이상의 파일을 열어서 동시에 작업하는 경우 2개 이상의 파일을 한번에 넘어서 이동해야 할 경우 :2n :2N 의 형태로 명령하면 된다.
주의할 점은 파일에 수정이 발생했으면 저장하지 않고서 다음 파일로 이동할 수 없다. 혹은 :N! :n! 을 사용하여 저장하지 않고 이동할 수 있다.
다중 파일 오픈 시 현재 작업하고 있는 파일과 파일의 목록을 보고 싶으면 esc 를 눌러 대기 상태에서 :ls 를 입력하면 된다.
:b[숫자] 는 :ls 명령어로 확인된 파일 별 숫자를 확인하여 파일 이동 시에 사용한다.
ab 파일로 이동하고 싶으면 :2 로 이동할 수 있고, eee 파일로 이동하고 싶으면 :4 로 이동할 수 있다.