1. 환경설정 #
set nocp "오리지널 VI와의 호환성을 없애고, VIM 만의 기능들을 쓸 수 있게 함. (compatible)
syntax on "언어에 따른 자동 문법, 구문의 색을 다르게 표시.
filetype on "파일의 종류를 자동으로 인식.
colorscheme torte "컬러스킴을 변경.
set ru "화면 우측 하단에 현재 커서의 위치(줄, 칸)를 표시. (ruler)
set sc "완성중인 명령을 표시.
set nu "라인 번호를 표시.
set vb "키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍임. (visualbell)
set hls "검색된 스트링의 하이라이트. (hlsearch)
set ci "C 형태의 들여쓰기. (cindent)
set ai "자동 들여쓰기. (autoindent)
set si "좀더 똑똑한 들여쓰기. (smartindent)
set sw=4 "자동들여쓰기를 4칸으로 설정. (shift width)
set ts=4 "tab 간격을 4칸으로 설정. (tab stop)
2. 디스플레이 #
^L : 현재 화면을 다시 디스플레이
^I : 화면을 지우고 다시 그림
3. 커서의 이동 #
b, w : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동.
B, W : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. (문장부호 무시)
e : 다음 단어의 끝 글자로 이동.
E : 다음 단어의 끝 글자로 이동. (문장부호 무시)
H, M, L : 화면의 맨 위/ 중간 / 맨 아래로
0 : 그 줄의 맨 처음으로 (숫자 0이다.)
^ : 그 줄의 첫 글자로
$ : 그 줄의 맨 끝으로
+ : 다음 줄의 처음으로
- : 윗 줄의 처음으로
4H : 화면 상의 처음 줄부터 4 줄 밑으로
4L : 화면 상의 마지막 줄부터 4 줄 위로
% : (), {} 그리고 []의 대칭되는 위치로 이동
4. 편집 버퍼를 통한 이동 #
^F, ^B : 한 화면 앞으로 / 뒤로 (^는 Ctrl글쇠를 의미.)
^D, ^U : 반 화면 앞으로 / 뒤로
^E : 커서는 현재 위치 그대로 화면만 한 줄씩 위로 이동
5. 행 단위 이동 #
G : 파일의 마지막 행으로 가기
4G : 4번째 행으로 가기
6. 삽입 명령 #
i : 커서 위치부터 삽입 시작
a : 커서 위치 오른쪽부터 삽입 시작
A : 현재 줄의 맨 끝 부터 삽입 시작
I : 현재 줄의 맨 처음 부터 삽입 시작
o : 커서 아래에 행 삽입
O : 커서 위에 행 삽입
7. 삭제 명령 #
x : 현재 커서위치의 한 문자 삭제
X : 현재 커서 왼쪽의 한 문자 삭제
dd : 한 줄 지우기
4dd : 4 줄 지우기
dw : 한 단어 지우기
d4w : 4 단어 지우기
D : 커서 오른쪽 행 삭제
:4 d : 4 째 행 삭제
:4,10 d : 4-10 째 행 삭제
8. 내용의 복사 및 이동 #
yy : 현재 행 복사
yw : 현재 커서위치부터 단어끝까지 복사
4yy : 현재 행 위치부터 4행 복사
p : 아래(오른쪽)에 붙여넣기
P : 위(왼쪽)에 붙여넣기
xp : 두 문자를 바꿈
deep : 두 단어를 바꿈
ddp : 두 줄을 바꿈
:3 co 7 : 3 행을 7행 다음으로 복사
:1,3 co 7 : 1-3 행을 7행 다음으로 복사
:3 m 7 : 3 행을 7행 다음으로 이동
:1,3 m 7 : 1-3 행을 7행 다음으로 이동
8. 내용 고치기 #
J : 현재 행과 아래 행 결합
3J : 3줄 합치기
u : 이전 명령 취소
cw : 단어 변경
cc : 행 변경
C : 커서 오른쪽의 행 변경
r : 한 글자만 변경 (입력 모드로 바뀌지 않음)
R : 입력하는 대로 겹쳐써서 변경
~ : 문자형(대,소문자) 변경
9. 마크 지정 #
ma : 현재 커서의 위치를 a로 지정
'a : 지정된 a로 이동
10. 패턴 #
. : 바로 전에 수행한 명령을 반복
/[pattern] : 커서 위치에서 뒤쪽으로 pattern을 찾음
?[pattern] : 커서 위치에서 앞쪽으로 pattern을 찾음
n : 뒤쪽으로 반복해서 패턴을 찾음
N : 앞쪽으로 반복해서 패턴을 찾음
11. 기타 #
:!command : vi를 중단하고 지정한 셸 명령을 실행
12. 치환 #
:[x,y]s/<p>/<r>/<f> : x번째 라인에서 y번째 라인까지 <p> 문자열을 찾아 <r> 문자열로 치환.
<f>는 옵션인데, c(confirm)는 확인을 요하는 옵션, g(global)는 무조건(전부) 치환하라는
옵션이고 i(ignore-case)는 대소문자를 구별하지 않는 옵션이다.
:%s/aaa/bbb/g : 파일 전체(g)에서 "aaa"를 "bbb"로 치환
:1,$ s/test/TEST/g : 문장의 1행부터 마지막까지(파일 전체) 모든 "test"를 찾아
대문자 "TEST"로 치환
vi에서 치환은 정규표현식이 이용된다. (실제로 이 상태에서 실행하는 명령어는 ed나 ex라는
프로그램이 처리하게 된다. 그래서 보통 이 상태를 "ed-모드"라고 한다.) 문서에서 원하는
패턴을 찾으려면 바로 위에 '문자열 탐색'에서 설명된 바와 같이 /문자열 이나 ?문자열 을
사용한다. 문자치환 명령은 다음과 같다.
[형식] :범위s/변경전/변경후/수정자
'범위'는 명령이 실행될 범위(예: 10,20 이면 10행 부터 20행 까지)를 나타낸다. 's'는 치환
(substitute)의 약자이며 '수정자'는 치환 명령의 세부사항을 결정한다. 필요한 것만 뒤에
적어주면 된다. (중복 가능)
g (global) - 한 줄에서 일치하는 부분을 여러개 찾았을 때 전부 치환한다. 이것을 사용하지
않으면 처음 것만 치환.
c (confirm) - 만족하는 정규표현식을 찾았을 때 치환하기 전에 확인한다.
i (ignore-case) - 대소문자를 구별하지 않는다.
"변경전"과 "변경후"에 치환할 내용을 입력한다. "변경전"에 정규표현식을 적는다.
정규표현식으로 ., *, ^, $, [], \(...\), \<...\>, POSIX.2 단축 표현을 사용할 수 있다.
여기서 여러 문자를 묶여서 단위를 만들고 찾은 내용을 기억하는 특수문자가 \(, \)임을 주의해야
한다. 반대로 (, )가 일반문자이다. vim(VI iMproved)에서는 vi에
추가로 |, +, (?와 같은) =, {n,m}을 사용할 수 있지만, 앞에 \ 를 붙여야 한다.
또, vim에는 \i, \k, \p, \s 등의 단축 표현들이 있다.
"변경후"에 \n 과 & 를 사용할 수 있다. \n 는 "변경전"에서 n번째 \(...\) 에 대응하는
부분이고, & 는 "변경전"에 만족한 전체를 나타낸다. 예를 들어,
:%s/\([0-9][0-9]*\) \([Cc]hapter\)/\2 \1/
는 문서에서 12 Chapter같은 부분을 Chapter 12와 같이 치환하고,
:%s/F[1-9][12]*/&/g
는 HTML 문서에서 "F1" ~ "F12"란 단어 모두를 굵은 체로 바꿉니다. (주의! &는 정규표현식의
특수문자는 아니지만 vi의 특수문자이므로, 문자그대로의 &를 사용하려면 대신 \& 를 사용해야 한다.)
이외에도 (뒤를 모두 대문자로) \u 나 (뒤를 모두 소문자로) \l 같은 기능이 있다.
:%s/aaa/bbb/g - 파일 전체(g)에서 'aaa'을 'bbb' 로 치환
:%s/^M//g - 파일 전체(g)에서 ^M 을 삭제. ^M은 Ctrl+V+Enter로 입력한다.
:s/aaa/bbb/ - 현재 행에서 'aaa'을 'bbb' 로 치환
:1,10 s/aaa/bbb/ - 1행부터 10행 까지 'aaa'을 'bbb' 로 치환
:1,. s/str/rep/ - 1부터 현재행까지 'aaa'를 'bbb' 로 전부 바꾸기
:g/감자/s//바위/gc - 각 발생 확인 후 대체
주의할 점은 치환명령어가 / 문자로 각 부분을 구분하기때문에 "변경전"이나 "변경후"에
/ 문자를 사용하려면 \/ 같이 써야한다.
필요하다면 / 대신 다른 문자를 사용해도 된다. 예를 들어,
:%s/\/usr\/local\/bin\//\/usr\/bin\//g
대신
:%s#/usr/local/bin/#/usr/bin/#g
가 알아보기 더 쉽다.
'OS > Linux&Unix' 카테고리의 다른 글
[Unix/Linux] AIX ftp 서비스 종료/시작 방법 (0) | 2022.11.08 |
---|---|
[Linux/Unix] unix 파일 내용을 쉘 스크립트로 만들어서 보기 (0) | 2022.11.08 |
[Linux/Unix] find 명령어 / 오래된 파일 삭제하기 / size, mtime, ctime (0) | 2022.11.02 |
[Unix/Linux] 유닉스 파일 시스템 / 명령어 (0) | 2022.11.02 |
[Linux/Unix] 리눅스 파일 시스템 (0) | 2022.11.02 |