@ vi 편집기 - 오리지널 버전, vim은 vi의 개선사항 - 텍스트 문서보는 용도
- 명령 모드 : vi 편집기 시작 모드, 커서 이동, 복사/붙여넣기/삭제/치환...
- 입력 모드 : 텍스트 입력이 가능한 모드
- 확장 모드 : 좌측 하단에서 명령어를 수행할 수 있는 모드
1. 커서 이동 관련
- h, j, k, l
- 방향키가 있는 키보드라면 그냥 방향키 사용하자!
- $ 커서 라인 끝 이동 <- End 키
- 0 커서 라인 앞 이동 <- Home 키
- Ctrl+F 다음 화면 이동 <- Page Down 키
- Ctrl+B 이전 화면 이동 <- Page Up 키
- G 마지막 라인 이동
- nG N번째 라인 이동
- gg 첫번째 라인 이동
- ngg N번째 라인 이동
2. 입력 관련
- i 커서 앞에서부터 입력 시작
- I 라인 맨 앞에서부터 입력 시작(0 -> i)
- a 커서 뒤에서부터 입력 시작
- A 라인 맨 뒤에서부터 입력 시작($ -> a)
- o 커서 아래 라인에 빈줄 생성 및 입력 시작
- O 커서 위 라인에 빈줄 생성 및 입력 시작
- u 입력한 내용을 취소
- Ctrl+r 'u'를 취소하는 기능
3. 삭제, 복사, 붙여넣기 관련
- x delete 키와 동일
- nx n글자만큼 삭제
- dd 라인 삭제
- ndd n라인만큼 삭제
- dw 단어 삭제
- ndw n단어만큼 삭제
- yy 복사
- nyy 현재 라인에서 n번째 라인까지 복사
- p 커서 위쪽 라인에 붙여넣기
- P 커서 아래 라인에 붙여넣기
- np n번 붙여넣기
vi -> vim으로 변경
cd
vi .bashrc
alias mv='mv -i'
alias vi='vim'
:wq
source .bashrc
cd
cd test
vi test.c
#include <stdio.h>
int main()
{
int a;
puts("Hello Linux1");
puts("Helo Linux2");
return 0;
}
확장 모드
- :q 나가기
- :q! 강제 나가기
- :wq 저장하고 나가기
- :set bg=dark 글자 색상 반전
- :set bg=light 글자 색상 반전
- :set nu 라인 번호 출력
- :set nonu 라인 번호 출력 X
- :set ts=4 tab 키 공간 4칸으로 조정
- :set title vi 편집기 타이틀 창에 파일 제목 표시
나갔다 들어오면 초기화된다. 홈 디렉토리에서 만들어서 설정하자
- vim 편집기가 실행될때, '.vimrc' 파일안에 설정된 명령이 확장 모드에서 자동으로 적용된다.
- 다음과 같은 내용을 '.vimrc' 파일에 설정 및 생성한다.
cd
vi .vimrc(학장모드에서 자동 적용)
set nu
set ts=4
set title
colo delek
syntax on
[참고] 확장 모드에서 리눅스 명령어 사용하는 방법
:!date
2022. 05. 27. (금) 13:33:02 JST
계속하려면 엔터 혹은 명령을 입력하십시오 (엔터)
:!bash
[root@Client1 /root]#
[root@Client1 /root]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 5435 5434 0 11:40 pts/0 00:00:00 -bash
root 7325 5435 0 13:32 pts/0 00:00:00 vim test.c
root 7349 7325 0 13:33 pts/0 00:00:00 bash
root 7377 7349 0 13:33 pts/0 00:00:00 ps -f
[root@Client1 /root]# exit
exit
계속하려면 엔터 혹은 명령을 입력하십시오 (엔터)
vi .bashrc(계정 로그인하면 자동실행되는파일),에서 vi->vim으로 만듬
명령 프롬포트(PS1)(.bashrc에 등록)
PS1="[\u@\h \$PWD]$ " -> 일반 계정($)
PS1="[\u@\h \$PWD]# " -> 프롬프트를 바꿈, 관리자계정(#)
export PS1 -> PS1 변수를 환경변수에 등록한다.
:wq
source .bashrc -> .bashrc 다시실행
로그인 -> bash(쉘) -> .bash_profile -> .bashrc 을 실행한다.
각 계정 홈 디렉토리에있는 .bahrc를 실행한다!
root 계정은 /root 에 있는 .bashrc를 일반 계정은 /home/user1 에 있는 .bashrc 를 실행한다.
따라서 항상 실행되어야하는 명령어를 .bashrc에 넣어두면 편하다.
root 계정에서 일반 계정 .bashrc는 /etc/skel(계정 생성시 생성된 계정홈 디렉토리에 복사되는 파일/디렉토리가 존재) 안에 존재한다.
vimrc
vi 편집기를 실행하면 .vimrc가 먼저 실행되어 확장모드에서 자동 적용된다.
5. swp 파일
- root 계정으로 SSH 접속을 하나 더 실시한다.
- 기존 root 계정 접속을 A라고 하고, 새로 접속한 root 계정 접속을 B라고 할 예정이다.
1) 이미 vi 편집기로 오픈한 파일을 vi 편집기로 오픈한 경우
- A에서 'test.c' 파일을 vi 편집기로 오픈한다.
- B에서 'test.c' 피일을 vi 편집기로 오픈한다. 그럼 이미 'test.c' 파일이 vi 편집기로 오픈된 상태이기 때문에 다음과 같은 내용이 출력된다.
- 'q'를 입력해서 나오기를 실시한다.
2) 파일을 수정하다가 vi 편집기가 종료된 경우
- A에서 'test.c' 파일을 vi 편집기로 오픈하여 다음 내용을 추가한다.
[root@Client1 /root]# vi test.c
1 #include <stdio.h>
2
3 int main()
4 {
5 int a;
6 puts("Hello Linux1");
7 puts("Hello Linux2");
8 puts("Hello Linux3"); <- 추가
9 return 0;
10 }
11
- B에서 다음과 같은 단계를 실시하여 A에서 실행한 vi 편집기를 강제로 종료한다.
- A를 확인하면 '죽었음' 문자열과 함께 vi 편집기가 종료된 것을 확인할 수 있다.
- A에서 vi 편집기로 추가한 내용을 저장하지 않고 종료되었기 때문에 '.test.c.swp' 파일을 이용하여 복구할 수 있다.
.test.c.swp 파일에 저장된걸 확인할 수 있다.
- A에서 vi 편집기로 'test.c' 파일을 오픈한다.
- 'R'을 입력하면 다음고 같은 내용이 추가적으로 출력된다.
"test.c" 10L, 101C
스왑 파일 ".test.c.swp"을(를) 사용합니다
원래 파일 "~/test.c"
복구가 끝났습니다. 모든 게 정상인 지 확인해 보셔야만 합니다.
(어쩌면 다른 이름으로 저장하고 싶으실 지도 모르겠습니다
그리고 바뀐 내용을 확인하려면 원래 파일에 대해 diff를 실행하세요)
이제 .swp 파일을 지우셔도 됩니다.
계속하려면 엔터 혹은 명령을 입력하십시오 (엔터)
- 복구가 끝났기 때문에 엔터를 실시하고 저장하고 나가기를 실시한다.
1 #include <stdio.h>
2
3 int main()
4 {
5 int a;
6 puts("Hello Linux1");
7 puts("Hello Linux2");
8 puts("Hello Linux3"); <- 복구됨
9 return 0;
10 }
:wq
- A에서 다시 vi 편집기를 이용하여 'test.c' 파일을 오픈한다.
- 복구가 끝난 이후에도 위의 내용이 출력되는 이유는 '.test.c.swp'이 남아있기 때문이다.
- 'Q'를 입력하고 나가기를 한 이후 '.test.c.swp' 파일을 삭제하고 'test.c' 파일을 다시 오픈한다.
[root@Client1 /root]# rm -rf .test.c.swp
[root@Client1 /root]# vi test.c
:q
[root@Client1 /root]# rm -rf file1 test.c
[참고] PS1, PS2 환경 변수
1) PS1 환경 변수
- 쉘 프롬프트 출력 형식
- PS1 환경 변수 기본값
[root@Client1 ~]# env | grep PS1
[root@Client1 ~]# set | grep PS1
PS1='[\u@\h \W]\$ '
- 실습환경 PS1 환경 변수
[root@Client1 /root]# env | grep PS1
PS1=[\u@\h $PWD]#
[root@Client1 /root]# echo $PS1
[\u@\h $PWD]#
Ex1) PS1="[\u@\h \W]# "
- \W
- PS1 변수 기본값
- 계정 홈 디렉토리는 '~(틸드)'로 표기된다.
- 다른 경로 이동시 현재 경로만 표기된다.
[root@Client1 ~]# PS1="[\u@\h \W]# "
[root@Client1 ~]# cd /etc/sysconfig
[root@Client1 sysconfig]# cd
[root@Client1 ~]#
Ex2) PS1="[\u@\h \w]# "
- \w
- 계정 홈 디렉토리는 '~(틸드)'로 표기된다.
- 다른 경로 이동시 절대 경로가 표기된다.
[root@Client1 ~]# PS1="[\u@\h \w]# "
[root@Client1 ~]# cd /etc/sysconfig
[root@Client1 /etc/sysconfig]# cd
[root@Client1 ~]#
Ex3) PS1="[\u@\h \$PWD]# "
- \$PWD
- 계정 홈 디렉토리 이름이 '~(틸드)'가 아닌 이름으로 표기된다.
- 다른 경로 이동시 절대 경로가 표기된다.
[root@Client1 ~]# PS1="[\u@\h \$PWD]# "
[root@Client1 /root]# cd /etc/sysconfig
[root@Client1 /etc/sysconfig]# cd
[root@Client1 /root]#
Ex4) PS1="[\w]# "
- 경로만 표기된다.
[~]# PS1="[\w]# "
[~]# cd /etc/sysconfig
[/etc/sysconfig]# cd
[~]#
- 기존 실습 환경 PS1으로 복구한다.
[~]# source .bashrc
[root@Client1 /root]#
2) PS2 환경 변수
- 명령어 입력(Ex : 따옴표...)이 덜 되었거나, \를 이용하여 명령어 입력을 이어서 할 경우 출력되는 프롬프트
[root@Client1 /root]# echo $PS2
>
[root@Client1 /root]# env | grep PS2
[root@Client1 /root]# set | grep PS2
PS2='> '
[root@Client1 /root]# echo 'abcd
> 1234
> 5678'
abcd
1234
5678
[root@Client1 /root]# echo abcd\
> 1234\
> 5678
abcd12345678
Ex) PS2 프롬프트를 이용하여 'cat /etc/passwd | head -1 ; cat /etc/passwd | tail -2' 명령을 실행한다.
vimtutor - root 에서 실행