vi, vim 편집기

oogu ㅣ 2022. 4. 3. 16:56

@ 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 에서 실행
















'리눅스' 카테고리의 다른 글

리눅스 shell  (0) 2022.05.30
권한  (0) 2022.04.07
압축 및 아카이빙  (0) 2022.04.03
리눅스 계정  (0) 2022.04.03
메타캐릭터 + 리다이렉션  (0) 2022.04.03