vi 명령어 모음

출처: http://hefos.egloos.com/2338164

※ 삽입 명령
a 커서 뒤에 입력
A 라인 끝에 입력
i 커서 앞에 입력
I 라인시작 부분에 입력
o 커서 있는 라인 밑에 입력
O 커서가 있는 라인 위에 입력

※ 커서 이동 명령
h 왼쪽으로 커서 한 칸 이동
H 화면의 처음으로 이동
L 오른쪽으로 한 칸 이동
L 화면 끝으로 이동
e 다음 단어의 마지막으로 이동
E 커서를 공백으로 구분된 다음 단어 끝으로 이동
b 한 단어 뒤로 이동
B 커서를 공백으로 구분된 이전 단어로 이동
w 커서를 한 단어 뒤로 이동
W 커서를 공백으로 구분된 다음 단어로 이동
k 커서를 한 라인 위로 이동
j 커서를 한 라인 아래로 이동
O 커서를 라인의 시작으로 이동
$ 커서를 라인의 끝으로 이동
Enter 커서를 다음 라인 시작으로 이동
– 커서를 전 라인의 시작으로 이동
Ctrl + F 다음 화면으로 이동
Ctrl + D 화면의 반만 앞으로 이동
Ctrl + B 전 화면으로 이동
Ctrl + U 화면의 반만 뒤로 이동
G 커서를 텍스트 마지막 라인으로 이동
숫자G 커서를 숫자 라인만큼 이동
M 커서를 화면 중간 라인으로 이동
“ 커서를 전 위치로 이동
( 문장의 시작으로 이동
{ 문단의 시작으로 이동
) 문장 끝으로 이동하여 다음 단어의 시작으로 커서 이동
} 문단 끝으로 이동

※ 방향키를 이용한 커서 이동 명령
<-, Del 왼쪽으로 커서 한 칸 이동
PageUp 화면 위로 이동
->, Space 오른쪽으로 한 칸 이동
PageDown 화면 아래로 이동
↑ 윗 줄로 커서 이동
Enter 다음 줄 첫 칸으로 이동
↓ 아래 줄로 커서 이동
Esc 다음 줄 첫 칸으로 이동
Home 줄 처음 칸으로 이동

※ 삭제 명령
x 커서가 있는 문자 삭제
X 커서가 있는 문자 앞에 있는 문자 삭제
dw 커서가 있는 단어 삭제
db 커서가 앞에 있는 단어 삭제
dW 공백으로 구분된 뒷 단어 삭제
dB 공백으로 구분된 앞 단어 삭제
dd 커서가 있는 라인 삭제
D 커서가 있는 라인의 나머지 삭제
d) 문장의 나머지 삭제
d} 문단의 나머지 삭제
dG 파일의 나머지 삭제
dH 화면의 시작까지 삭제
dL 화면의 나머지 삭제
J 커서와 다음 단어의 공백을 모두 삭제

※ 바꾸기 명령
r 커서에 있는 문자 대치
R 입력 모드로 한 문자씩 덮어씀
s 커서가 있는 문자 삭제 후 입력 모드로 전환
S 커서가 있는 줄을 삭제 후 입력 모드로 전환
cb 커서가 있는 앞 문자 삭제 후 입력 모드
cW 공백으로 구분된 뒷 단어를 삭제 후에 입력 모드
cB 공백으로 구분된 앞 단어 삭제 후 입력 모드
cc 커서가 있는 라인을 삭제하고 입력 모드
C 커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환
cO 커서에서부터 라인의 시작까지 텍스트 바꾸기
c 특정 텍스트 바꾸기
c) 문장의 나머지 바꾸기
c} 문단의 나머지 바꾸기
cG 파일의 나머지 바꾸기
cm 표시까지 모든 것 바꾸기
cL 화면의 나머지 바꾸기
ch 화면의 시작까지 바꾸기

※ 복사
yw 커서가 있는 단어를 복사
yb 커서가 있는 앞 단어를 복사
yW 공백으로 구분된 뒷 단어 복사
yB 공백으로 구분된 앞 단어를 복사
y 특정한 다음 텍스트 복사
yy 커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동
y) 문자의 나머지 복사
y} 문단의 나머지 복사
yG 파일의 나머지 복사
yH 화면의 시작까지 복사
yL 화면의 나머지 복사

※ 텍스트 이동
p 삭제나 복사된 텍스트를 커서가 있는 문자나 라인 뒤에 삽입
P 삭제나 복사된 텍스트를 커서가 있는 문자나 라인 앞에 삽입
dw p 커서가 있는 단어를 삭제한 후 이를 원하는 곳 커서 뒤로 삽입
dw P 커서가 있는 단어를 삭제한 후 이를 변경한 커서가 있는 곳으로 삽입
d p 지정한 다음 텍스트로 삭제한 후 커서가 가리키는 곳으로 이동
d) P 문장의 나머지로 이동
d} p 문단의 나머지로 이동
dG P 파일의 나머지로 이동
dH P 화면 시작 부분으로 이동
dL P 화면의 나머지를 이동

※ vi 에디터 종료 마치기 명령
:q 그대로 종료하기
:q! 변경된 내용을 저장하지 않고 강제로 종료하기
:wq 변경된 내용을 저장하고 종료하기
: x :wq와 동일한 명령
ZZ :wq와 동일한 명령

※ 검색
/pattern 텍스트에서 앞으로 패턴 검색
>pattern 텍스트에서 뒤로 패턴 검색
n 앞 또는 뒤로 이전 검색 반복
N 반대 방향으로 이전 검색 반복
/ 전 검색을 앞으로 반복
? 전 검색을 뒤로 반복

※ 문자열 치환
:s/old/new 현재 행의 처음 old를 new로 교체
:s/old/new/g 현재 행의 모든 old를 new로 교체
:10,20s/old/new/g 10행부터 20행까지 모든 old를 new로 교체
:-3,+4s/old/new/g 현재 커서 위치에서 3행 위부터 4행 아래까지 old를 new로 교체
:%s/old/new/g 문서 전체에서 old를 new로 교체
:%s/old/new/gc 문서 전체에서 old를 new로 확인하며 교체
:g/pattern/s/old/new/g Pattern이 있는 모든 행의 old를 new로 교체
:g/pattern/s//new/g :%s/old/new/g와 동일

옵션
옵션약어
기능
디폴트

autoindent
ai
들여 쓰기 가능, 탭으로 들여 쓰기 범위 지정
off

autoprint
ap
줄이 바뀔 때 현재 줄을 화면상에서 출력
on

errobells
ed
명령 에러가 발생시 삑 소리나게 함
off

number
nu
줄 번호를 나타나게 함
off

report
report
편집시 메시지를 보낼 편집 변화 크기 지정
5

showmatch
sm
가로 닫기 괄호를 사용할 때 일치하는 가로 열기 괄호를 보여줌
off

wam
wam
저장하지 않고 vi 종료할 때 경고 메시지를 뿌려 줌
on

ignorecase
ic
검색 패턴에 사용되는 대소문자 구별하지 않음
on

tabstopp=n
ts=n
탭 공백을 n 수만큼 지정
8

wrapmargin=n
wm=n
텍스트 오른쪽 여백을 n 수만큼 지정
0

※ Mark 사용
mx 현재 위치를 x 이름의 마크로 저장

“ 이전에 마크한 위치로 이동
`x 마크한 위치(행, 열)로 이동

‘’ 이전에 마크한 줄로 이동
‘x 마크한 줄로 이동

※ Named Buffer 사용
“ayy 현재 줄을 “a 버퍼에 복사

“Ayy 기존의 버퍼에 현재 줄을 버퍼에 추가
“ap “a 버퍼에 복사된 데이터를 붙여 넣기
☞ ‘a’ 부터 ‘z’ 까지 사용가능

※ 여러 문서 편집
vi filename1, filename2 … vi 로 여러 파일 열기
:n vi로 open한 여러 파일중 다음 파일로 전환

:N vi로 open한 여러 파일중 이전 파일로 전환
:4n 여러 파일중 4개 파일 skip후 파일 Open

:args 현재 열린 모든 파일중 현재 편집중인 파일 표시

GVim 명령어

출처: http://musapanz.egloos.com/2761544

– vi 편집기란?

파일을 생성하거나 편집하는데 사용하는 프로그램을 에디터(editor)라고 합니다.
유 닉스에서 사용하는 에디터 중 vi 에디터 텍스트 편집기로 가장 대표적인 프로그램은 vi 에디터 입니다. vi 편집기는 Visual Editor로서, 모든 유닉스 시스템에 있으며 따라서 vi 편집기를 사용할 수 있다는 것은 어떤 유닉스 시스템에서도 문서 작업을 할 수 있다는 것을 의미합니다.

예를 들어 전자우편을 작성하거나, 프로그램을 작성하는 일, 또는 기타문서를 작성할 때에 편집기는 필수적인 연장(tool)입니다.

– vi 에디터 구성과 방법
vi 는 입력 모드와 명령어 모드 그리고 라인 모드의 세 가지 형태로 구성되어 있습니다.입력모드는 일반적은 텍스트 에디터와 같이 원하는 문자를 입력할 수 있는 상태를 말하고, 명령어 모드는 입력한 내용을 편집하기 위해서 다양한 편집 관련 명령어를 사용 할 수 있는 상태를 의미 한다.

따라서 입력 모드에서는 문자의 입력만이 가능하며 문단의 재구성과 삽입, 삭제 등의 편집 기능은 오직 명령어 모드에서만 사용할 수 있습니다.

vi를 실행한 직후에는 명령어 모드에 위치하게 되며 i(insert)나 a(append), o(open)를 입력하게나 <Insert> 키를 이용해서 입력 모드로 전환할 수 있다.

입 력 모드에서 명령어 모드로 복귀할 때는 <Esc>키만을 사용합니다.입력 모드로 전화 i 또는 a 또는 o 또는 <Inset> 명령어 모드로 전환 <Esc>vi는 입력 모드와 명령어 모드 이외에 라인 모드를 추가로 갖고 있는데, 이는 셸 명령어나 외부 프로그램들을 에디터의 내부에서 직접 실행 시킬 수 있는 모드입니다.

라인 모드는 vi의 본체인 ex가 실행되는 상테이므로 보다 원초적인 텍스트 조작이 가능해진다. 또한 라인 모드는 셸과 직접 연결되어 파이프를 구성하기 때문에 작업 중인텍스느에 대해서 다양한 작업을 연결시킬 수 있다.

다 른 모드와는 달리 라인 모드는 화면의 마지막 줄에 라인 모드임을 알리는 콜론(:)과 함께 입력한 내용이 출력되어 진행 중인 내용을 확인을 할 수 있도록 되어 있다. 라인 모드는 명령어 모드에서만 전환될 수 있으며, 입력 모드에서 직접 라인 모드로 들어올 수 없다.

따라서 vi 에디터는 실행 직후에 위치한 명령어 모드에서 입력 모드 그리고 라인 모드의 세 가지 모드를 상호 전환시키면서 작업을 진행하는 방식으로 사용된다.

그림 삽입.

라인 모드에서 :을 먼저 입역한 뒤에 원하는 명령어를 입력하는 방식으로 vi 명령어 이외의 셸 명령어와 외부 명령어들을 실행시킬 수 있다.
0. 설정
:scriptnames vim 이 구동시 읽어 들이는 파일의 목록표시
:set ff=dos[unix] 문서 포맷을 설정

1.시작
vi file vi를 시작하여 지정한 파일 편집
vi -R file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

2.종료
:wq 데이터를 저장하고 종료
:q! 데이터를 저장하지 않고 종료

3. 디스플레이 제어하기
^L 현재 화면을 다시 디스플레이하기
:set number 내부 줄 번호 디스플레이
:set nonumber 배부 줄 번호 디스플레이 않기
:vs 창을 세로로 분할하기
:sp 창을 가로로 분할하기
4. 마지막으로 지운 것 복사하기
p 마지막으로 지워진 것을 커서의 뒤/아래에 삽입
P 마지막으로 지워진 것을 커서의 앞/위에 삽입
xp 두 문자를 바꿈
deep 두 단어를 바꿈
ddp 두 줄을 바꿈

## 만약 yy로 복사한 라인을 p로 붙인다면 커서의 위치에 붙여진다.
5. 패턴 검색
/rexp 지정된 정규 표현식에 대해 앞으로 이동
/ 이전의 패턴에 대해 앞으로 검색을 반복
?rexp 지정된 정규 표현식에 대해 뒤로 이동
? 이전의 패턴에 대해 뒤로 검색을 반복
n /나 ?명령에 대해 같은 방향으로 반복
N /나 ?명령에 대해 반대 방향으로 반복

6. 약어의 사용
:ab short long short를 long에 대한 약어로 변경
:ab 현재 약어 목록을 표시
:una short 약어 short를 표시

7. 줄 길이의 조정
r<Return> 문자를 뉴라인으로 변경
J 아랫줄을 현재줄의 끝에 붙인다.
:set wm=n 오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

8. 커서 이동
h<Left> 커서를 한 칸 왼쪽으로 이동
j<Down> 커서를 한 줄 아래로 이동
k<Up> 커서를 한 줄 위로 이동
l<Right> 커서를 한 칸 오른쪽으로 이동
<Backspace> 커서를 한 칸 왼쪽으로 이동
<Space> 커서를 한 칸 오른쪽으로 이동
– 커서를 이전 줄의 처음으로 이동
+ 커서를 다음 줄의 처음으로 이동
<Return> 커서를 다음 줄의 처음으로 이동
0 커서를 현재 줄의 맨 앞으로 이동
$ 커서를 현재 줄의 맨 끝으로 이동
^ 커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동
w 커서를 다음 단어의 첫 글자로 이동
e 커서를 다음 단어의 끝 글자로 이동
b 커서를 이전 단어의 첫 글자로 이동
W w와 같음(문장 부호 무시)
E e와 같음(문장 부호 무시)
B b와 같음(문장 부호 무시)
( 다음 문장의 처음으로 이동
) 이전 문장의 처음으로 이동
{ 다음 문단의 처음으로 이동
} 이전 문단의 처음으로 이동
H 커서를 화면 맨 위로 이동
M 커서를 중간으로 이동
L 커서를 맨 아래로 이동
gg : 문서의 처음으로
shift + g : 문서의 마지막으로

9. 편집 버퍼를 통한 이동
^F 한 화면 아래로 이동
^B 한 화면 위로 이동
n^F n화면 아래로 이동
n^B n화면 위로 이동
^D 반 화면 아래로 이동
^U 반 화면 위로 이동
n^D n줄만큼 아래로 이동
n^U n줄만큼 위로 이동

10. 셸 명령 실행
:!command vi를 중단하고 지정한 셸 명령을 실행
:!! vi를 중단하고 이전의 셸 명령을 실행
:sh vi를 중단하고 셸을 실행
:!csh vi를 중단하고 새로운 C-셸을 실행
11. 패턴에 의한 치환
:s/pattern/replace/ 현재 줄의 치환
:lines/pattern/replace/ 지정한 줄의 치환
:line,lines/pattern/replace/ 지정한 범위의 치환
:%s/pattern/replace/ 모든 줄의 치환

## 팁하나 더

정규표현식중에 일정 부분을 메모리로 지정하여 기억해 놓을 수 있다.

(..),(..) <<– 이렇게 괄호로 묶어 놓은 부분이 각각 1번 2번으로 저장되어진다.

예를들어,

1) ab,cd 를 cd,ab 와 같은 형태(포맷)로 바꾸고 싶을때는…..

=> %s/\(..\),\(..\)/\2,\1/g

2) a1b2c3d4e5f, xxba, 123 에서 두번째 , 이후의 문자열을 삭제하고 싶을때는……

=> %s/,\(.*\),.*/,\1,/g

와 같이 하면 된다

12. 데이터 읽기
:liner file file의 내용을 지정한 줄 다음에 삽입
:r file file의 내용을 현재의 줄 다음에 삽입
:liner !command command의 결과를 지정한 줄 다음에 삽입
:r !command command의 결과를 현재의 줄 다음에 삽입
:r !look pattern 지정한 pattern으로 시작된 단어 삽입

13. 정규 표현식을 사용하기 위한 특수 기호
. 뉴라인을 제외한 모든 단일 문자와 대응

* 영개이상의 선행 문자와 대응

^ 줄의 시작을 표현

$ 줄의 끝을 표현

\< 단어의 시작과 대응

\> 단어의 끝과 대응

[ ] 묶여진 문자중의 하나와 대응

[^ ] 묶여진 문자를 제외한 아무것하고나 대응

\ 이어지는 기호를 문자 그대로 해석

14. 줄 번호
nG 줄번호 n으로 건너뛰기
1G 편집 버퍼의 첫 줄로 건너뛰기
G 편집 버퍼의 마지막 줄로 건너뛰기
:map g lG g가 lG와 같도록 매크로 정의

15. 삽입
i 입력 모드로 전환, 커서 위치 앞에서 삽입
a 입력 모드로 전환, 커서 위치 뒤에서 삽입
I 입력 모드로 전환, 현재 줄의 앞에 삽입
A 입력 모드로 전환, 현재 줄의 끝에 삽입
o 입력 모드로 전환, 현재 줄의 아래에 전개
O 입력 모드로 전환, 현재 줄의 위에 전개

16. 편집하고 있는 파일을 바꾸기
:e file 지정한 파일의 편집
:e! file 지정한 파일의 편집, 자동 점검의 생략

17. 내용 고치기
r 단지 한 글자만 변경(입력 모드로 바뀌지 않음)
R 입력하는 대로 겹쳐 써서 변경
s 삽입에 의해 한 단어의 변경
C 커서의 위치로부터 줄 끝까지 삽입에 의한 변경
cc 전체 줄을 삽입에 의한 변경
S 전체 줄을 삽입에 의한 변경
cmove 커서부터 move까지 삽입에 의해 변경
~ 대,소문자 바꾸기

18. 고치기의 취소 또는 반복 (Undo, Redo, Repeat)
u 편집 버퍼를 수정했던 마지막 명령을 취소
U 현재 줄을 저장
. 편집 버퍼를 수정했던 마지막 명령 반복

ctrl+r 취소한것을 취소

19. 문자 삭제
x 커서가 있는 문자 삭제
X 커서의 왼쪽 문자 삭제
D 커서부터 줄의 끝까지 삭제
dd 현재 줄의 전체 삭제
dmove 커서부터 move까지 삭제
dG 커서부터 편집 버퍼의 끝까지 삭제
d1G 커서부터 편집 버퍼의 맨 앞까지 삭제
:lined 지정한 줄의 삭제
:line, lined 지정한 범위의 삭제

shift + d : 현재 커서 위치부터 현재라인의 마지막까지 삭제
shift + j : 현재행의 개행문자를 삭제한다(아래라인을 현재 라인 뒤에 붙인다)

20. 여러 줄의 복사와 이동
:linecotarget 지정한 줄을 복사하여 target 줄 밑에 삽입
:line, linecotarget 지정한 범위를 복사하여 target 줄 밑에 삽입
:linemtarget 지정한 줄로 이동하여 target 줄 밑에 삽입
:line, linemtarget 지정한 범위로 이동하여target 줄 밑에 삽입

블록지정모드(노말) : v
블록지정모드(라인) : shift+v
블록지정모드(사각형) : ctrl + v

선택블록 복사 : y
선택블록 붙여넣기 : p

21. 데이터를 처리하기 위한 셸 명령의 사용
n!!command n번 줄에서 command의 실행
!move command 커서부터 move까지 command 실행
!move fmt 커서부터 move까지 줄들을 형식 맞추기

22. 데이터 저장하기
:w 원래의 파일로 데이터를 저장
:w file 지정한 파일로 데이터를 저장
:w>> file 지정한 파일에 데이터를 추가

23. VIM 인코딩
VI: 유니코드(UTF-8)로 인코딩 전환

VIM은, BOM(Byte Order Mark) 이 있는 UTF-8 파일은 자동으로 인식하지만, BOM이 없으면 인식하지 못하고 파일 속의 한글이 깨집니다. 이때는 다음과 같이 인코딩을 수동으로 전환해 주면 됩니다.

* 현재 편집중이라면 키보드의 Esc키를 누릅니다.
* 콜론(:) 키를 눌러, 명령어 모드로 들어갑니다.
* se enc=utf8 이라고 입력합니다. 그러면 UTF-8 파일의 한글이 정상적으로 보일 것입니다.

VI: 한글 완성형(euc-kr)으로 인코딩 전환
만약 Vim이 한글 완성형 파일을 인식하지 못하고, 한글이 깨진다면 다음과 같이 합니다.
se enc=cp949
또는
se enc=korea 라고 입력합니다.

## 참고로 현재 vim 의 설정상황을 보려면 set 명령을 통해 볼 수 있다.
file의 인코딩을 utf-8 로 지정하고 싶다면 se fileencoding=utf-8 명령을 내려주고 저장하면 된다.