vi 관련 요약
http://shagall.tistory.com/202
0. 명령 모드/입력 모드/ex 모드(끝줄 모드) - 기본적으로 명령 모드에 있음
:를 누르면 끝줄 모드로 가고, 입력 모드에서는 ESC 키를 눌러 빠져 나옴
'{'(이전 빈줄), '}'(이후 빈줄) - 즉 빈줄이 나오는 것을 문장으로 취급함
명령 모드의 대부분의 명령 앞에는 숫자 인수를 줄 수 있음(2j 2dw 7yy 3P 등등)
1. 입력 모드 진입 : a(A), i(I), o(O) - append, insert, open line.
수정 관련도 입력 모드 진입하는 것임
2. 명령 모드
커서 이동
hjkl - 좌,하,상,우로 한칸씩 이동
wbWB - 다음 단어, 이전 단어의 첫 글자로 이동
eE - 단어의 마지막 글자로 이동
^$ - 그 줄의 첫 글자, 마지막 글자로 이동
0
+- - 다음 줄의 첫 글자, 윗 줄의 첫 글자로 이동
() - 이전 문장의 첫 글자, 다음 문장의 첫 글자로 이동
{} - 이전 문단, 다음 문단으로 이동
% - 매치되는 괄호 찾기
수정 - 주로 c(change?)와 커서 이동 명령의 결합 형태
cj, ck - 커서가 있는 줄과 그 다음 줄, 앞 줄 교체
ch, cl - 커서 바로 앞, 위치의 글자 한 개를 여러 글자로 교체. Esc로 빠져나옴
c0, c$ - 커서 위치부터 줄의 처음, 끝까지 교체
cc - 커서가 있는 줄을 교체
C - 커서 위치부터 줄의 끝까지 교체. c$과 동등
s(substitute) - 커서 위치의 글자를 여러 글자로 교체, cl과 동등
r, R - 커서 위치의 한 글자 교체, 커서 위치부터 ESC를 누를 때까지 다른 글자로 교체
커서 이동, 스크롤
H, M, L - 커서를 화면의 맨 위, 중앙, 맨 아래로
[n]H, [n]L - 커서를 위에서, 아래에서 [n]번째 줄로
Ctrl+b, Ctrl+f - 한 화면 위, 아래로 스크롤
Ctrl+u, Ctrl+d - 반 화면 위, 아래로 스크롤
z
gg(1gg), 1G - 문서의 맨 처음 줄로
G - 문서의 맨 마지막 줄로
[n]G - [n]번째 줄로 이동
삭제 - 주로 d(delete)와 커서 이동 명령의 결합 형태
dh, dl - X(x) - 커서 바로 앞, 커서 위치의 글자 삭제
dj, dk - 커서가 있는 줄과 그 다음 줄, 앞 줄을 삭제
d0, d$ - 커서 위치부터 줄의 처음, 끝까지 삭제
dd - 커서가 있는 줄을 삭제
D - 커서 위치부터 줄 끝까지 삭제. d$와 동등
dw - 한 단어 삭제
x(X) - 커서 위치, 커서 바로 앞 위치의 글자 삭제. dl, dh와 동등
복사, 붙이기 - 글 복사 방법은 주로 y(yank)와 커서 이동 명령의 결합 형태임
글 교체, 글 삭제 명령으로 지워진 글들은 버퍼에 저장됨
pP - 커서 다음, 커서 앞에 버퍼의 글을 끼워 넣음
yj, yk - 커서가 있는 줄과 그 다음 줄, 앞 줄을 복사
y0, y$ - 커서 위치에서 줄의 처음, 끝까지 복사
yw - 커서 위치부터 단어의 끝까지 복사
yy(Y) - 커서가 있는 줄을 복사
블록 지정 관련
Shift+v - 라인 단위 Visual Mode 블럭 지정
Ctrl+v - 칼럼 단위 Visual Mode 블럭 지정. ctrl+v가 paste 키로 작동할 때는 ctrl+q를 눌러야 함
v - 블럭 지정, v(Visual Mode)를 누른후 hjkl을 통해 블록 지정. vim에 추가된 특수 기능임
y(복사), d(자르기), U(대문자로), u(소문자로) - 모두 블럭 내용에 대해서 작업하는 것임
탭 끼우거나 취소 기능
n>> - 커서 있는 줄에서부터 n개의 줄에 탭을 넣음
n<< - 커서 있는 줄에서부터 n개의 줄에서 탭을 제거. 또는 u로 해도 됨
마킹 - a에서 z까지의 26개의 마킹을 제공함.
버퍼 - 1에서 9까지의 9개의 버퍼에 저장된 내용 기억함. stack 형태로 1이 최신. 9가 가장 old
ma, mz - 현재 위치를 'a'로, 'z'로 마크
`a - 마크된 'a'로 이동, 'a - 마크된 'a'가 있는 줄의 처음으로 이동
`` - 직전의 커서 위치로 이동. '' - 직전에 커서가 위치하던 줄의 처음으로
"[n]p 또는 "[n]P - n번째 버퍼를 붙여줌
버퍼 어떤 것인지 모를 경우 "1pu.u.u.u. 등으로 입력을 계속하면서 찾아넣을 수도 있음
"a3yy - 현재 줄부터 3줄을 버퍼 a에 복사. 26개의 이름 버퍼를 직접 지정하면서 이용하는 방법
"ap - 버퍼 a에 있는 내용을 붙여넣음. 26개의 이름 버퍼를 직접 지정하면서 이용하는 방법
화면 창, 분할, 이동 관련 - 모두 Ctrl+w와 관계가 있음
Ctrl+w n,v - 화면 수평, 수직 분할
Ctrl+w q,o - 커서가 있는 창 닫기, 현 커서가 있는 창 이외의 창 닫기(수정 안된 창들만)
Ctrl+w w, hjkl - 창간 이동(순환), 좌측,하단,상단,우측 창으로 이동
Ctrl+w = - 모든 창의 크기를 균등하게 함(내용에 따라 약간 변동)
Ctrl+w [N]+,- - 창의 수직 크기를 N행만큼 증가, 감소
Ctrl+w [N]>< - 창의 수평 크기를 N칸만큼 증가, 감소
기타 명령 모드
uU - 작업 취소, 그 줄에 행해진 작업 모두 취소
ctrl+r - 작업 재실행
. - 조금 전에 했던 명령 반복
J - 현재 줄과 아래 줄을 연결
~ - 대문자를 소문자로, 소문자를 대문자로 바꿈
% - 괄호의 반대쪽 짝으로 이동
Ctrl+l - 현 화면을 지우고 다시 그림.
Ctrl+g - 파일에 관한 정보 표시
ZZ - 저장하고 종료. :x와 동일함
검색
f[a-z] - 현재 줄에서 문자 검색. ;,(다음 a, 이전 a)
;, - 한줄 검색에서의 다음 문자, 이전 문자
3. 끝 줄 모드 또는 ex 모드
종료, 파일, 편집, 실행 관련
:q - 종료
:q! - vi 강제 종료(경고 무시)
:wq! - 강제 저장 후 종료
:w [file]
:w >> [file] - 덧붙여서 저장
:x - 변경되었을 경우 저장하고 종료(ZZ와 동일)
:e [file] - file을 불러옴
:e# - 이전에 편집하던 파일을 불러옴
:e% - 현재 파일을 다시 불러옴. 즉 저장되지 않은 작업 취소
:r [file] - [file]을 커서 위치에 끼워넣기
:r ![command] - [command] 실행 결과를 끼워넣기 - :r !sort phone
:![command]
:!bash
:!latex %; xdvi %<.dvi - latex와 관계해서 작업 시 편한 것
:%!xxd : 16진 모드로 보이게 함
:%!xxd -r : 다시 아스키 모드로 보이게 함
설정 관련
:set [option]
:set [nooption]
:set number(nu), nonumber(nonu) - 줄 번호 표시, 해제
:set wrapscan 또는 :set ws - 순환 검색 설정
:set nowrapscan 또는 :set nows - 순환 검색 해제
이동 명령어
:n - n행으로 이동 (여기서 n은 숫자임)
패턴 검색 및 교체
현재 줄에서 'a'라는 문자 검색은 fa - ;,(다음 a, 이전 a)
/[pattern], ?[pattern] - 현 위치에서 아래 방향, 위 방향으로 패턴 검색
n, N - 검색하던 방향, 반대 방향으로 계속 검색(계속 순환 검색)
:s/old/new - 현재 줄에서 처음 한번 old를 new로 교체
:s/old/new/g - 현재 줄의 모든 old를 new로 교체
:1,20s/old/new/g - 1에서 20번째 줄의 모든 old를 new로 교체
:-2,+4s/old/new/g - 커서 2줄 위부터 4줄 아래까지 모든 old를 new로 교체
:%s/old/new/g - 문서 전체에서 old를 new로 교체
:%s/old/new/gc - 문서 전체에서 확인하면서 old를 new로 교체
:g/pattern/s/old/new/g - pattern이 있는 모든 줄의 old를 new로 교체. :%s/old/new/g와 동일
파일 버퍼 관련
:ls - 버퍼의 내용을 나열
:bN - N번 버퍼로 이동(N은 숫자임)
:bwN - N번 버퍼를 완전 삭제(N은 숫자며, 없으면 현재의 버퍼삭제)
상용구 등록, 해제
:ab - 상용구 등록
:unab - 상용구 해제
:ab nrlove I Love Null@Root
:unab nrlove
여러 줄을 지정하고 싶을 경우 ^M을 넣어야 하는데 ^M은 Ctrl+v를 누른 후 Ctrl+m을 누르면 됨
윈도우즈에서는 Ctrl+v를 대신할 다른 키가 필요한 듯함
윈도우즈에서는 그냥 Ctrl+v 자체가 ^M으로 들어가는 듯함
Ctrl+v가 붙여넣기로 작동하는 경우 Ctrl-q m으로 ^M을 넣을 수 있다고도 함
이 경우는 Ctrl-q로 ^가 찍히고 M은 Ctrl+M으로 넣어야 함. \r, \n을 사용할 수는 없는 것 같음
4. 정규식
^, $ - 줄의 처음, 줄의 끝
.(아무 글자나 한 글자), *(*표 앞의 내용이 0번 이상 반복됨)
\{min,max\} - min 이상 max 이하의 횟수만큼 반복됨
[...] - [과 ] 사이에 있는 글자 중 하나
5. 도움말 부분에서
항목 이동 - 커서 키나 hjkl로 이동
창 닫기 - :q
vim에서 빠져나가기 - :qa!
주제로 점프 - 태그(|bars| 등)에 커서를 놓고 Ctrl+]
마우스 활성화 - ":set mouse=a" (xterm이나 GUI에서)
|bars| 등의 태그에서 왼쪽 마우스 더블 클릭
되돌아가기 - Ctrl+T 또는 Ctrl+O (계속 반복)
도움말 - ":help" 명령으로 검색함. 인자로 직접 찾고 싶은 것을 넣을 수 있고
첨자를 이용해서 더 세분해서 찾을 수 있음.
첨자 - normal mode command(없음), visual mode command(v_), insert mode command(i_)
:help x
:help v_u
:help i_
6. 여러 파일을 편집하는 방법
$vi file1.c file2.c file.3c 또는 vi *.c
버퍼 1에 file1.c가 들어가고 버퍼 2,3에 각각 file2.c file3.c가 들어가며
vim 명령어 모드에서 :b2를 입력하면 file2.c가 열리게 된다.
7. 매크로 - 명령 모드용 매크로와 입력 모드용 매크로 따로 지정 가능
:map #2 dwelp
#2 - F2. 그냥
키를 그냥 찍으면
:map! x sequence - 입력 모드 매크로
:unmap! x
vi 실행 시마다 매크로 돌아가게 하려면 홈 디렉의 .exrc 파일에 아래와 같이 넣어두면 됨.
" 특수문자 입력을 간편하게 하기 위한 상용구
ab ;\ $\backslash$
ab ;~ \textasciitilde
8. vi 설정 파일 - /etc/vimrc, 홈 디렉의 .vimrc 파일. Gui 버전은 /etc/gvimrc, .gvimrc 파일
set autoindent " 자동으로 들여쓰기를 한다.
set cindent " C 프로그래밍을 할때 자동으로 들여쓰기를 한다.
set smartindent " 좀더 똑똑한 들여쓰기를 위한 옵션이다.
set textwidth=79 " 만약 79번째 글자를 넘어가면 \
set wrap " 자동으로
set nowrapscan " 검색할 때 문서의 끝에서 다시 처음으로 돌아가지 않는다.
set nobackup " 백업 파일을 만들지 않는다.
set visualbell " 키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍이게 한다.
set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸)를 보여준다.
set tabstop=4 " Tab을 눌렀을 때 8칸 대신 4칸 이동하도록 한다.
set shiftwidth=4 " 자동 들여쓰기를 할때 4칸 들여쓰도록 한다.
" 아래는 한글을 제대로 처리하기 위해 필요하다.
if $LANG[0] == `k' && $LANG[1] == `o'
set fileencoding=korea
endif
"터미널이 xterm-debian 혹은 xterm-xfree86일 경우 컬러를 사용한다.
if &term =~ "xterm-debian" || &term =~ "xterm-xfree86"
set t_Co=16
set t_Sf=^[[3%dm
set t_Sb=^[[4%dm
set t_kb=^H
fixdel
endif
"문법 강조 기능을 사용한다.
if has("syntax")
syntax on " Default to no syntax highlightning
endif
* Vim에서 F9 키로 한방에 컴파일, F10 키로 실행까지!
Vim 에디터에서 편집중인 C소스를 펑션키 하나로 컴파일해서 실행까지 하는 방법을 소개합니다.
키를 누르면 편집중인 파일을 Save,
키를 누르면 편집중인 C소스를 컴파일,
키를 누르면 컴파일한 소스를 실행하기.
다음 내용을 홈 디렉토리의 .vimrc 파일에 추가하세요.
map :w!
map :! gcc % -o %<
map :! ./%<
윈도우즈용 Vim에서는 다음과 같이 설정해 주시면 편리합니다.
(윈도우즈용 gcc는 www.mingw.org에 있습니다.)
를 누르면 편집중인 파일을 Save,
를 누르면 파일선택상자로 파일을 Open,
키를 누르면 편집중인 C소스를 컴파일,
키를 누르면 컴파일한 소스를 실행.
다음 내용을 c:vim_vimrc 파일에 추가하세요.
map :w
map :browse e
map :! gcc % -o %<.exe
map :! %<.exe
자세한 내용은 :help filename-modifiers 참고.
자료출처 : kltp
Todo : 편집 모드에서 화살표 키를 누를 때 위치가 변경되는 경우도 있지만 C, D 등으로 바뀌며 라인이 분리되는 시스템도 있다. 화살표 키가 화살표 키로 작동하게 하는 방법 알아볼 것
댓글
댓글 쓰기