< vi 편집기 >
모드형 편집기 => 여러 모드가 있고, 그 모드들 마다 기능이 다른 편집기 화면단위 출력
vi 편집기의 모드
1. 명령 모드
처음 vi편집기를 실행 했을 때, 만나는 모드,
방향키 및 h,j,k,i키를 이용한 이동과 명령 모드 명령어를 사용가능
명령모드에서 다른 모드로 이동하는 것이 vi모드 이동의 기본
다른 모드 실행 중에 명령모드로 돌아오려면 esc키를 입력
## 명령 모드의 명령어
- r : 현 커서 위치에 있는 한 글자를 입력한 값으로 수정
=> 명령모드 상태에서 r 누르고 , 입력가능 - dd : 행 단위로 삭제, 앞에 숫자를 입력해서 반복할 횟수를 지정할 수 있음
=> 4dd누른경우 해당 커서부터 4 행이 삭제됨 - dw : 단어 단위로 삭제, 현재 커서가 있는 부분부터 연결되어 있는 단어를 삭제
- x : 현재 커서가 있는 글 한자 삭제
- yy : 행 단위로 복사, 버퍼 위에 씌운 후에 적용하는 느낌
- yw : 단어 단위로 복사
- p : 현재 커서가 위치한 곳에서 뒤로 y로 복사한 내용을 붙여넣기
- P(대문자) : 현재 커서가 위치한 곳에서 앞으로 y로 복사한 내용을 붙여넣기
- u :직전 명령 취소
- ^(shitf + 6) : 현재 커서가 위치한 가장 앞행으로 이동
- $(shift + 4) : 현재 커서가 위치한 행에서 가장 뒤로 이동
- gg : 최상단으로 이동
- G : 최하단 행으로 이동
- 숫자 +G : 숫자 해당 행으로
- ctrl + b : page up
- ctrl + d : page down
- 숫자 + % : 해당 문서의 비율위치로 이동
- ctrl + a/x : 숫자 올리기 / 내리기
#매크로 - q + [지정키] ==> recording 메세지가 출력되고 녹화 시작
모든 작업을 마치고 q 를 누르면 recording종료 - @ + [지정키] 순차적으로 누르면 매크로가 실행
#register - 별도의 지정키에 내용을 저장하고 해당 내용을 다시 불러와서 작업
- " 누르고 [지정키] 누른 후에 yy yw로 복사하고 다시 사용시에는
- " 누르고 [지정키] 누른 후 p
- !! 지정키를 대문자로 지정할 시, 여러내용을 한번에 해당 내용을 추가로 덧붙일 수 있음
#마크
- 현재 커서가 위치 지점을 지정키에 기록,
- m + [지정키] => 기억시키고 ' ` ' (역따옴표) 누르고 지정키 눌러서 복귀
- ``( 역따옴표 두번) 을 누르면 직전에 위치했던 지점으로 복귀
# /문자열
=> 해당 문자열을 검색, 검색 결과 이동은 n/N 을 눌러서 이동
# 마이크로 매크로
직전에 수행했던 작업을 반복하고자 할 때 , 마침표를 눌러서 반복가능
- yy 복사
- 숫자 + yy => 커서 위치부터 [숫자]개수만큼의 행까지 복사
- p 붙이기
- :wq, ZZ 저장
- i,a,o,esc 모드전환
2. 입력모드
텍스트를 입력하는 모드. 자유롭게 텍스트를 작성할 수 있지만 기능적인 명령어들을
사용 불가. 명령모드에서 i,a,o,I,A,O를 눌러서 진입이 가능
- A : 현재 행에서 제일 뒤로 가서 입력모드 전환
- I : 현재 행에서 제일 앞으로 가서 입력모드 전환
- i,a : 현 커서 위치에서 입력 전환, a는 attached로 한 칸 뒤부터 입력모드 전환
i 는 insert, 현재 칸부터 입력 전환 - o : 한줄 내려서 입력모드 전환 , O한줄 위에 추가하고 입력 전환
- c : 수정 명령. 뒤에 뭘 붙이냐에 따라서 수정 범위를 변경 할 수 있음
- cc ==> 행 단위로 내용 수정
- cw ==> 단어 단위로 내용 수정
- c +방향키 ==> 현 커서 위치부터 해당 방향으로 내용 수정
,현재 커서의 위치는 삭제되고 새로운 열이 생성 - 진입시 , INSERT 라는 표시가 좌측에 표시
문자를 입력하고 ctrl + p 를 누를 시에 추천 단어 목록이 뜬다.
(현재 문서 내에서 비슷한 값들로 추천목록이 생성)
3. 마지막행 모드
: 을 눌러서 진입하고 명령을 입력해주면 명령 수행.
- :[범위][기능]/[대상]/[결과]/[옵션]
ex) 1,21s/ssh/icmp/gi - :w ==> 저장
- :w [ 파일명 ] ==> 파일명으로 새로 저장
- :q ==> 나가기
- :wq ==> 저장하고 나가기
- :e [대상]==> edit 편집한다. == 열기
- :e! ==> edit 하지 않는다. == 초기 상태로 다시(마지막 저장상태)
- :sp ==> 현재 편집창을 수평으로 나눔
- :vs ==> 현재 편집창을 수직으로 나눔
- ctrl + ww 혹은 ctrl + w 방향키 ==> 다중 창 간 커서 이동
- :new ==> 새 문서를 새 창에 띄우고
- :e new ==> 현재 창에 새 문서를 띄움
- :/문자열 ==> 해당 문자열 검색
- :?문자열 ==> 해당 문자열 검색
- :s/문자열1/문자열2 ==> 제일 먼저 등장하는 1번 문자열을 2번 문자열로 치환
(행 내 문자열1을 모두 바꾸고 싶으면 s/문자열1/문자열2/[옵션]에 global, 대소문자 무시는 i 입력)
!! 문자열 위치에 정규표현식 사용 가능
(tcp|udp) == tcp 혹은 udp
/\(tcp\|udp\)
범위를 전체를 잡을 땐 % 사용
- :숫자,숫자 ==> 범위 지정
- :숫자 ==> 해당 행으로 이동
- :s/문자열/\L&/ ==> 해당 문자열을 소문자로
- :s/문자열/\U&/ ==> 해당 문자열을 대문자로
- :!명령어 ==> 해당 시스템 명령어 시행
- :r [대상파일] ==> 해당 파일의 내용을 현 행에 추가
- :r !명령어 ==> 해당 명령어의 프롬프트 출력 결과를 현 행에 추가
- :숫자 r !명령어 ==> 해당 라인에 명령어 출력 결과를 추가
- :w ! 명령어를 일시적으로 창에 보여줌
4. 비주얼 모드:
범위를 지정하고 해당 범위에서 수정할 수 있는 모드
- v : 글자 단위로 범위를 지정
- V : 라인 단위로 범위를 지정
- ctrl + v : 블록 단위로 범위를 지정
범위 지정 후 수행할 수 있는 명령들
- y : 복사
- d : 잘라내기
- c : 수정
- J : 서로 다른 줄 하나로 합치기
- U : 대문자로 수정
- u : 소문자로 수정
- gv : 직전에 지정했던 블록 다시 지정
!!마지막행 모드를 블럭 지정해서 실행 가능
마지막행 모드 진입해서 norm i[문자] ==> 해당 문자열 각 행 제일 앞에 추가
(주로 주석처리 시 사용)
!!ctrl + v로 블럭 지정 후에 I를 눌러서 입력모드로 변경 시,
입력한 내용을 일괄적으로 해당 블럭 내, 각 행에 적용(esc로 빠져나오고 적용)
# vi 환경변수
마지막 행 모드를 통해서 적용 시키거나,
/etc/vimrc 추가해서 설정 적용이 가능한 vim에 대한 환경 변수들.
(매번 새로 적용할 게 아니면 vimrc에 고정적으로 기입해서 사용)\
- set ic ==> 대소문자 무시
- set nu ==> 행 번호 표시
- set ai ==> 줄 맞춤
- set sm ==> 괄호의 짝을 표시해주는 기능
- set sts=숫자 ==> tab의 간격을 설정
#vi 명령어
- vi [파일명] ==> 파일 열기
- vi -R [파일명] ==> Readonly로 열 때
- vi -o [파일명1] [파일명2] ==> 한 번에 여러 파일 열기
- vi -r ==> 현 디렉터리에 복구 파일이 있는지 확인
- vi -r [파일명] ==> 복구 파일이 있을 시, 해당 파일로 바로 열기
??? 복구파일
.[파일명].sw[a-z] 로 생성되는 파일들
비정상 종료, 혹은 이미 파일이 열려있는 상태에서 동일한 파일을 새로 파일을 열려고 할 때 vi는 해당 파일에 대한 복구 파일을 생성함.
재접근 시, 해당 파일을 먼저 컨택하기 때문에 정상 종료하거나 복구 파일을 삭제하면 더 이상 복구모드 접근창이 열리지 않음
O : read - only
E : edit ( 마지막 저장상태)
R : .*.swp 파일로 수정(복구)
Q : 나가기
#브라우징 모드
vi . 을 입력해서 들어가는 모드. 일종의 DOS 환경처럼 터미널을 이용한 탐색 및 파일열기가 가능
#임시적 셸 빠져나가기?
ctrl +z를 이용해서 작업 중에 빠져나갈 수 있음 (halt 상태)
해당 상태로 밀린 작업들은 jobs 명령를 통해서 확인할 수 있음
작업으로 돌아가는건 fg 명령어로 돌아갈 수 있음
fg %숫자 ==> 해당 번호의 작업으로 돌아가기
#정규표현식을 이용해서 복수 문자열을 복수의 문자열로 치환
#ssh 22/tcp The Secure Shell (SSH) Protocol
#ssh 22/icmp The Secure Shell (telnet) Protocol
tcp => icmp , SSH => telnet
s/tcp\(.\{-\}\)SSH/icmp\1telnet/
==> tcp SSH 그리고 그 사이에 있는 글자들을 icmp, telnet 그 사이에 있는 글자 그룹들로 바꿔줘라
tcp(.{-})SSH ==> tcp와 SSH 사이에 있는 글자는 하나의 그룹으로 취급
'Linux' 카테고리의 다른 글
[Linux] 여러 명령어 (1) | 2023.03.18 |
---|---|
[Linux] 명령어 (0) | 2023.03.14 |
[Linux] 1. Linux 란? (0) | 2023.02.22 |
댓글