Vi 란?
- vi(or vim) - Vi IMproved, a programmer's text editor
- 콘솔 환경에서 가장 보편적으로 사용 가능한, 다양한 기능을 제공하는 텍스트 편집기
vim # 새로운 파일 생성
vim [filename] # 파일 열기
세 가지 (명령, 입력, 라인 명령) 모드
vi 에디터를 처음 실행하여 진입하게 되면 명령 모드로 들어가게 되는데, 이 상태에서는 편집을 불가하며 열람만 가능하다.
여기서 입력을 하고자 할 때에는 i 또는 a를 눌러 입력 모드로 진입할 수 있고 이때 하단에 -INSERT- 문구가 뜸
입력 모드에서 탈출하고 싶다면 esc 를 눌러서 탈출할 수 있다.
반대로 라인 명령 모드인 ex 모드로 진입하려면 : 을, 탈출하려면 esc나 엔터를 누르면 된다.
ex 모드에서는 저장(w), 종료(q), 취소(i) 등을 조합하여 원하는 명령을 수행할 수 있음
주의할 점은 입력 모드와 ex 모드 각각 서로에게 한 번에 접근할 수 없으며, 탈출하여 명령 모드를 거쳐서만 진입 가능하다.
명령 모드에서 입력 모드로 전환
- 입력 모드에서 esc를 누르면 명령 모드로 복귀함 (명령 모드로 전환하는 기호는 : )
- 명령 모드에서 저장 및 종료
- 변경사항을 저장하려면 :w 또는 :w [filename]
- (변경사항이 없는 경우) 종료하려면 :q , (변경사항을 버리고) 종료하려면 :q!
- 변경사항을 저장하면서 종료하려면 :wq 또는 :wq [filename]
명령 모드에서 커서 이동
현대의 우리는 대부분 방향키를 가진 키보드를 사용하고 있지만, 예전에는 방향키가 없었기도 했고 콘솔 키보드처럼 현재도 방향키가 없는 키보드가 다수 존재한다.
시스템에 vim 대신 vi만 설치된 경우, 또는 콘솔 키보드에 방향키가 없는 경우에 대비하여 방향키 (hjkl)은 반드시 숙지하자!
요약하자면 h 가 왼쪽 / j 가 아래쪽 / k 가 위쪽 / l 이 오른쪽으로 생각하면 됨
또한 추가로 gg를 입력하면 제일 첫 행으로 이동한다는 점과, 숫자G를 입력하면 해당 숫자의 행으로 이동할 수 있는 단축키도 유용하므로 알아두면 좋다.
+ Tip) vim에서 라인 넘버를 출력하는 기능
- 명령 모드에서 :set nu 를 입력하면 line number를 문서와 함께 볼 수 있으며, :set nonu 를 입력하면 번호가 사라짐
- 일시적인 수행이므로 vim 실행 시마다 line number를 보고 싶다면, echo set nu >> ~/.vimrc를 실행해주면 된다!
개인적으로 line number를 보는 것이 편한 사람은 리눅스 설치 시 위 커맨드를 입력해주면 될 것이다.
명령 모드에서 삭제, 복사, 붙여넣기
위 단축키들도 del 키나 backspace 키를 따로 사용하지 않고 수행할 수 있다는 장점을 갖고 있다.
x를 입력하면 Del과 같이 현재 커서의 오른쪽 부분이 지워지게 되며,
X를 입력하면 Backspace처럼 커서의 왼쪽 부분이 지워지게 된다.
또한 현재 커서가 있는 행을 복사하고자 하면 yy를 입력해주고, 복사한 내용을 현재 행 이후에 붙여넣고자 하면 소문자 p를, 현재 행 이전에 붙여넣고자 하면 대문자 P를 입력하면 된다.
리눅스는 대소문자를 구별하니 단축키 사용에도 신중을 기해야 함!
문자열 검색
현재 커서 이후로 특정 문자열을 찾을 수도 있는데, 위와 같이 /문자열 을 입력하고 엔터를 누르면 우리가 흔히 아는 Ctrl+F 한 결과처럼 문자열들이 하이라이트 쳐서 나온다.
방향키로 이전/다음 문자열로 이동하는 대신, 여기서는 n 키로 다음 문자열 이동, N 키로 이전 문자열로 이동 가능!
위 표는 문자열 검색의 심화 기호들을 나타낸 것이다.
기호들이 많이 헷갈리므로 일단 쉽게 / 기호를 "검색" 이라고 생각하면 편하다.
- 첫 번째 행처럼 /and 를 입력하면 현재 커서 위치 이후에 나타나는 and라는 문자열을 찾아 and, stanf, grand 등이 검색됨
- ?and는 반대로 현재 커서 위치 이전에 나타나는 and라는 문자열을 찾으며, 과거로 거슬로 올라가며 검색
- ^ 기호는 줄의 시작을 의미한다. 따라서 /^The 라고 하면 The로 시작하는 "줄"을 검색해줌
- \> 기호는 단어의 끝을 의미한다. 따라서 /^The\> 라고 하면 The라는 단어만 찾고, There 같은건 찾지 않음.
- $ 기호는 줄의 끝을 의미한다. 따라서 /end$ 라고 하면 end로 끝나는 "줄"을 찾음
- [bB] 는 대소문자를 모두 고려하여 검색한다는 의미로, /[bB]ox 라고 하면 box와 Box 모두 검색한다.
- n 은 방금 수행한 검색을 같은 방향으로 다시 실행
- N은 방금 수행한 검색을 반대 방향으로 다시 실행
찾아 바꾸기
- :%s/old/new
- old 문자열을 new 문자열로 대치하는 명령어
- 이는 각 행마다 딱 1번씩만 update 되므로, 만약 한 줄에 있는 모든 동일한 문자를 한 번에 대치하고 싶다면 맨 뒤에 /g 를 붙이면 됨
- 예를 들어 :%s/file/FILE 이라고 입력하면 file이라는 단어를 FILE로 대치한다.
- 주석 중에서 문장이 그냥 빈 주석, 즉 #\n 으로 구성된 경우, 해당하는 line을 삭제하려면 다음과 같이 입력한다.
- :%s/^#$\n/
- % 는 파일의 전체 범위를 의미하며, 파일의 모든 줄에 대해 수행된다는 뜻
- s는 substitute의 의밀로 검색한 내용을 다른 내용으로 바꾸는 기능
- ^는 앞서 살펴봤듯 "줄의 시작"을 의미하므로, 여기서 ^# 이라고 하면 #으로 시작하는 줄을 의미!
- $는 "줄의 끝"을 의미하는데 여기서는 $만 사용되었으므로 줄 끝에 아무 문자도 없음을 의미
- 뒷부분의 \n은 검색된 줄에서 줄바꿈이 포함된다는 뜻이 아니라, 결과적으로 찾아진 줄이 삭제되거나 치환될 때의 줄바꿈을 의미함
- / 은 정규 표현식의 종결 기호
'Linux' 카테고리의 다른 글
[Rocky Linux] SSH/RDP 서버 설정 및 원격 접속하는 방법 (0) | 2024.11.05 |
---|---|
[Linux] 정규표현식 (regular expression; regex) 연습하기 (feat. regexone.com) (0) | 2024.09.19 |
[Linux] VMware Workstation Pro 17 설치 방법 (Broadcom ver.) (0) | 2024.09.04 |
[Ubuntu] gcc 설치 오류 해결 방법 : sudo apt-get install gcc (0) | 2024.09.01 |
[Ubuntu] 용량 부족 시 디스크 용량 확인하는 방법 (disk space) (0) | 2024.08.21 |