vi 편집기를 사용하는 이유
본론에 들어가기 전에 왜 사용하는지를 알아야 한다.
vi 편집기는 텍스트 파일을 편집하기 위해 사용되는 고전적인 유닉스 텍스트 편집기이다.
vi는 1976년에 생겼고 유닉스 계열 운영체제에서 널리 사용된다. vi는 기본적인 편집 기능 외에도 다양한 명령을 통해 텍스트를 강력하게 조작할 수 있다.
우리가 리눅스를 공부하고 좀 더 실력을 발전해나가고 싶다면 vi 편집기에 대한 숙지를 해야 한다.
리눅스 시스템 관리와 작업 효율성을 크게 늘릴 수 있는 방법이므로 알아보자. 나도 많이 까먹었기에 다시 숙지를 하면서 설명하겠다.
크게 몇 가지 장점을 정리하겠다.
경량성과 속도
- vi는 매우 경량이며 시스템 리소스를 거의 사용하지 않는다. 특히 서버 환경이나 자원이 제한된 시스템에서 매우 유용하다.
광범위한 사용성
- 대부분의 유닉스 및 리눅스 시스템에 기본적으로 설치되어 있다. 거의 모든 환경에서 사용할 수 있다는 의미이다.
강력한 텍스트 편집 기능
- vi는 명령 모드와 입력 모드를 통해 효율적인 텍스트 조작이 가능하다.
- 예를 들어, dd, yy, p 등의 명령을 통해 텍스트를 쉽게 삭제, 복사, 붙여넣기 할 수 있다. 뒤에서 설명하겠다.
커스터마이징 가능
- .vimrc 파일을 통해 개인화된 설정이 가능하다. 사용자 맞춤형 환경을 조성할 수 있는 것이다.
원격 편집 기능
- SSH를 통해 원격 시스템에 접속하여 vi를 사용하면 파일 편집이 가능하다. 서버 관리나 원격 작업에서 매우 유용하다는 뜻이다.
확장성과 플러그인
- vim(Vi IMproved)으로 확장된 버전인 vim은 다양한 플러그인과 스크립트를 통해 기능을 확장할 수 있다.
- vim을 통해 텍스트 편집기를 IDE 수준으로 발전시킬 수 있다.
명령어 정리
vi 시작과 종료
vi test.txt -> test.txt라는 파일이 열린다. 이 파일이 없으면 빈 파일이 열린다
마지막 행 모드( 명령행 모드에서 : 키를 눌러 전환. )
- :q -> vi에서 작업한 것이 없을 때 그냥 종료
- :q! -> 작업한 내용을 저장하지 않고 종료
- :w 파일명 -> 작업한 내용을 저장만 한다. 파일명을 지정하면 다른 파일로 저장
- :wq, :wq! 작업한 내용을 저장하고 vi를 종료한다. (가끔 wq안먹을 때 있는데 권한 문제 때문에 그럴 수 있음)
명령 모드
- ZZ(대문자) -> 작업한 내용을 저장하고 vi 종료한다.
vi 모드 전환
명령모드 -> 입력 모드 전환
- i -> 현재 커서 자리에 입력
- a -> 현재 커서 다음 자리에 입력
- o -> 커서가 위치한 행의 다음 행
- I(대문자 i) -> 커서가 위치한 행의 첫 컬럼으로 이동하여 입력
- A -> 커서가 위치한 행의 마지막 컬럼으로 이동하여 입력
- O -> 커서가 위치한 행의 이전 행에 입력
입력 모드 -> 명령 모드 전환
- Esc 키
커서 이동하기
명령키 (/으로 나눔)
- k / j -> 커서를 한 행 위 / 아래로 이동한다
- l / h -> 커서를 한 글자 오른쪽 / 왼쪽으로 이동한다 (레프트 라이트)
- ^ 또는 0 / $ -> 커서를 현재 행의 처음 / 마지막으로 이동한다.
- - / + 또는 Enter -> 커서를 앞 / 다음 행의 처음으로 이동한다.
- H / M / L -> 커서를 화면의 맨 위 / 중간 / 맨 아래 행으로 이동한다 (하이 미들 로우)
- w / e -> 커서를 다음 단어의 처음 / 마지막 글자로 이동한다
- b -> 커서를 앞 단어의 첫 글자로 이동한다.
커서 이동하기를 예제를 통해 확인해보자.
화면 이동하기
기존 명령키(^은 ctrl이다)
- ^u -> 반 화면 위로 이동
- ^d -> 반 화면 아래로 이동
- ^b -> 한 화면 위로 이동
- ^f -> 한 화면 아래로 이동
- ^y -> 화면을 한 행만 위로
- ^e -> 화면을 한 행만 아래로 이동
특정 행으로 바로 이동하기
명령키
- G -> 파일의 마지막 행으로 커서 이동
- 행 번호G -> 지정한 행 번호로 커서 이동 (( ex) 5G 라고 하면 5번 째 행으로
마지막 행 모드
- :행 번호 -> 지정한 행 번호로 커서가 이동 (( ex) :5 라고 하면 5번 째 행으로
- :$ -> 파일의 마지막 행으로 커서 이동
내용 수정하기
명령키
- r -> 커서가 위치한 글자를 다른 글자로 수정
- cw, #cw -> 커서 위치부터 현재 단어의 끝까지 지정. #엔 수정할 단어의 수를 지정한다. 예를 들어 3cw는 커서 위치부터 세 단어 수정
- s, #s -> 커서 위치부터 esc를 입력할 때까지 수정한다. #에는 수정할 글자의 수 지정. 예를 들어 5s는 커서 위치부터 5글자 수정
- cc -> 커서가 위치한 행의 내용 모두 수정
- C -> 커서 위치부터 행의 끝까지 수정
한 글자 수정 예제
이 글을 글자 앞에 r 누르고 r로 바꾸면
이런 식으로 수정이 가능.
내용 삭제
명령키
- x, #x -> 커서 위치의 글자 삭제. #에는 삭제할 글자 수 지정. linux라는 단어가 있고 커서를 l 앞에 둔 후 3x로 lin 삭제.
- dw, #dw -> 커서 위치의 단어 삭제. #에는 뭔지 알죠? 삭제할 단어 수
- dd, #dd -> 커서 위치의 행 삭제. #에는 삭제할 행의 수
- D -> 커서 위치부터 행의 끝까지 삭제
명령 취소
명령키
- u -> 명령 취소
- U -> 해당 행에서 한 모든 명령 취소
마지막 행 모드
- :e! -> 마지막으로 저장한 내용 이후의 것을 버리고 새로 작업
복사 및 잘라 붙이기
명령키
- yy, #yy -> 커서가 위치한 행을 복사한다. #에는 복사할 행의 수 지정
- p -> 커서가 위치한 행의 아래쪽에 붙인다
- P -> 커서가 위치한 행의 위쪽에 붙인다
- dd, #dd -> 커서가 위치한 행을 잘라둔다. 삭제와 같은 기능이다. #에는 잘라둘 행의 수 지정
ubuntu editor vi study
I like
이런 글이 있다 치면 2yy를 하고 아래 행에 이동하여 p 명령키로 붙여넣으면
ubuntu editor vi study
I like
ubuntu editor vi study
I like
이런 식으로 활용이 가능하다.
네임드 버퍼 사용
언네임드 버퍼: 이름을 붙이지 않은 버퍼
네임드 버퍼: 이름을 붙여서 사용할 수 있는 버퍼(문자 또는 숫자)
- 네임드 버퍼: "a, "b, "c, "d, ..., "z
- 숫자 버퍼: "1, "2, ..., "9
이해를 돕기 위한 비유로 생각해보면, 언네임드 버퍼는 책상 위에 있는 메모지처럼 항상 하나만 존재하여 최근에 쓴 내용만 기억하는 반면
네임드 버퍼는 여러 개의 폴더를 가지고 있어 각각의 폴더에 특정 내용을 저장하고 필요할 때마다 꺼내 쓸 수 있는 파일 철처럼 작동한다.
마지막 행 모드에서 복사하기, 잘라내기, 붙이기
:을 입력하여 마지막 행 모드로 전환하는 것은 이전에 말했다. 범위 지정할 수 있다.
기본적으로 :이 있다는 가정이다.
범위 지정:
- 1, $ 또는 % -> 1행부터 마지막 행까지 지정한다.
- 1, . 1행부터 커서가 있는 행까지 지정한다.
- . , $ -> 커서가 있는 행부터 마지막 행까지 지정한다.
- , -3 -> 현재 행과 이전 행까지(총 네 행) 지정한다.
- 10, 20 -> 10행부터 20행까지 지정한다.
(명령키에서 여러 행을 지정하는 경우 숫자와 숫자 사이의 쉼표는 띄어쓰기를 하지 않는다.
복사하기, 잘라내기, 붙이기:
- :#y -> #로 지정한 행을 복사한다. 예를 들면 3y는 세 번째 행 복사
- :<범위>y -> 범위로 지정한 행 복사. 예를 들면 2,4y는 2~4 행 복사
- :#d -> #로 지정한 행을 잘라낸다(삭제) 예를 들면 3d는 세 번째 행 자르기
- :<범위>d -> 범위로 지정한 행을 잘라낸다(삭제) 예를 들면 1,4d는 1 ~ 4행 자르기
- :pu -> 현재 행 다음에 버퍼의 내용을 붙인다.
- :#pu -> #로 지정한 행 다음에 버퍼의 내용을 붙인다. 예를 들면 4pu 이렇게 하면 복사한 것을 4행 다음에 붙인다는 뜻.
검색하기
검색 명령키
- /문자열 -> 문자열을 아래 방향으로 검색
- ?문자열 -> 문자열을 위 방향으로 검색
- n -> 원래 찾던 방향으로 다음 문자열 검색
- N -> 역방향으로 다음 문자열 검색
헷갈릴 수 있으니 간단히 실습을 들어 설명하자면
I like
I like
ubuntu editor vi study
ubuntu editor vi study
I like
I like
~
이 상황에서 /ubuntu를 검색하면 첫 번째 ubuntu에 커서가 가고 그 후 n을 입력하면 다음 ubuntu로 커서가 이동한다.
파일 읽어오기, 여러 파일 편집하기
파일 관련 명령키
- :r 파일 => 지정한 파일을 읽어들여 현재 커서 위치에 삽입
- :e 파일 => 지정한 파일로 전환한다(기존 파일을 :w로 저장한 뒤에 실행해야 한다)
- :n => vi 시작 시 여러 파일을 지정했을 경우 다음 파일로 작업 이동
아까와 같은 ubuntu 행으로 이동해서 :r hello.txt 이런 식으로 다른 파일에 있던 내용을 불러와서 그 자리에 읽어올 수 있는 것이다.
vi test.txt exec.txt exec2.txt
이런 식으로 동시에 여러 개 파일명을 지정할 수 있다.
다음 파일 작업을 하려면 :n으로 이동하는 것
셸 명령 사용하기
셸 명령 실행 명령키
- :! 셸 명령 => vi 작업을 잠시 중단하고 셸 명령을 실행한다(다시 돌아오려면 엔터를 누른다)
- :sh => vi를 잠시 빠져나가서 셸 명령을 실행한다(vi로 돌아오려면 exit 명령 입력)
기타 명령키
- ctrl + l(소문자 L) => 현재 화면을 다시 출력
- ctrl + g => 현재 커서 위치의 행 번호를 마지막 행에 출력
- shift + J(대문자 j) => 현재 행과 아래 행을 연결하여 한 행으로 만든다
- .(마침표) => 바로 직전에 했던 명령을 반복한다.
- ~(틸드) => 커서 위치의 글자를 대문자나 소문자로 바꾼다.
지금부터 단계를 따라서 리눅스 실습을 한 번 해보겠다.
직접 해보는 vi 실습
vi로 새로운 파일인 exec3.txt 파일 열기
i를 입력하여 입력 모드로 전환하고 내용을 입력Esc키 를 입력하여 명령 모드로 전환하고 :w 명령으로 파일 내용을 저장3행 다음에 exec2.txt 파일을 읽어들임 --1행과 2행을 연결하여 한 행으로 만듬
반복 명령키로 1행과 2행을 연결하여 한 행으로 만듬 --~명령키로 1행의 everyone을 EVERYONE으로 바꿈 --Exec3.txt 파일을 저장하고, 셸 명령을 실행하여 현재 디렉터리의 경로를 확인::wq 명령으로 파일 내용을 저장하고 종료
이 순서대로 해보겠다.
exec3.txt를 열어서 i 키워드를 누른 후 내용 입력
esc 키를 누른 후 :w로저장
3행에 커서를 두고 :r exec2.txt로 읽어오기
1G로 1행에 커서를 두고 J 명령어로 두 문장을 합치게 되었다.
.(마침표) 명령어를 통해 동작을 반복하였다.
~명령키로 1행의 모든 everyone이 EVERYONE으로 되었다.
:w로 저장을 하고 :!pwd 명령키로 잠깐 나와서 pwd 명령을 수행한다.
그 후 다시 엔터로 복귀한다.
복귀하고
:wq로 저장 후 나가기 성공
vi 환경 설정 명령
set 명령과 옵션
- set nu -> 파일 내용의 각 행에 행 번호를 표시한다 (보이기만 할 뿐 저장되지는 않음)
- set nonu -> 행 번호를 감춤
- set list -> 눈에 보이지 않는 특수문자를 표시(
- set nolist -> 특수문자를 감춘다
- st showmode -> 현재 모드를 표시한다.
- set noshowmode -> 현재 모드를 감춘다
- set -> set으로 설정한 모든 vi 환경 설정 값 출력
- set all -> 모든 vi 환경 변수와 현재 값 출
set list 사진
set nu 사진
set 사진
여기까지가 vi 사용법이다.
처음엔 손에 익숙하지 않을 수 있으나 익숙해지고 숙련될수록 나중에 더 큰 도움을 얻을 수 있을 것이다.
'LINUX' 카테고리의 다른 글
리눅스마스터 2급 7일 합격 후기 (0) | 2025.03.11 |
---|---|
[Linux] 사용자 권한 설정과 chmod (56) | 2024.08.13 |
리눅스 디렉토리 명령어 (27) | 2024.07.07 |