2011. 7. 7. 08:33

   


LearningtheviandVimEditors
카테고리 과학/기술>컴퓨터 > OS/운영체제
지은이 Linda Lamb , Arnold Robbins , Elbert Hannah (O'ReillyMedia, 1970년)
상세보기 [ view ]

[ 책소개 ]

There's nothing that hard-core Unix and Linux users are more fanatical

about than their text editor. Editors are the subject of adoration and worship,

or of scorn and ridicule, depending upon whether the topic of discussion is

your editor or someone else's. vi has been the standard editor for close to 30 years.

Popular on Unix and Linux, it has a growing following on Windows systems, too.

Most experienced system administrators cite vi as their tool of choice. And since 1986,

this book has been the guide for vi. However, Unix systems are not what they were 30

years ago, and neither is this book. While retaining all the valuable features of

previous editions, the 7th edition of Learning the vi and Vim Editors has been

expanded to include detailed information on vim, the leading vi clone. Vim is the

default version of vi on most Linux systems and on Mac OS X, and is available for many

other operating systems too. With this guide, you learn text editing basics and advanced

tools for both editors, such as multi-window editing, how to write both interactive

macros and scripts to extend the editor, and power tools for programmers - all in the

easy-to-follow style that has made this book a classic.

   

Posted by devanix
2011. 6. 27. 09:52

[ 저장 및 종료 ]

[ex모드]

[설명]

:w

저장

:w file.txt

file.txt 파일로 저장

:w >> file.txt

file.txt 파일에 덧붙여서 저장

:q

vi 종료

:q!

vi 강제 종료

ZZ

저장 후 종료

:wq!

강제 저장 후 종료

:e file.txt

file.txt 파일을 불러옴

:e

현재 파일을 불러옴

   

[ 입력모드 전환 ]

[명령모드]

[설명]

[명령모드]

[설명]

a

커서 윈치 다음 칸부터 입력

A

커서 행의 맨 마지막부터 입력

i

커서의 위치에 입력

I

커서 행의 맨 앞에서부터 입력

o

커서의 다음 행에 입력

O

커서의 이전 행에 입력

s

커서 위치의 한 글자를 지우고 입력

S(cc)

커서 위치의 한 행을 지우고 입력

   

[ 이동 ]

[명령]

[설명]

[명령]

[설명]

H

왼쪽으로 이동(←)

l

오른쪽으로 이동(→)

j

아래 행으로 이동(↓)

k

위 행으로 이동(↑)

w or W

다음 단어의 첫 글자로 이동

b or B

이전 단어의 첫 글자로 이동

e or E

단어의 마지막 글자로 이동

<CR>

다음 행의 첫 글자로 이동

^

그 행의 첫 글자로 이동

$

그 행의 마지막 글자로 이동

+

다음 행의 첫 글자로 이동

-

위 행의 첫 글자로 이동

(

이전 문장의 첫 글자로 이동

)

다음 문장의 첫 글자로 이동

{

이전 문단으로 이동

}

다음 문단으로 이동

H

커서를 화면의 맨 위로 이동

z<CR>

현재 행을 화면의 맨 위로 이동

M

커서를 화면의 중앙으로 이동

z.

현재 행을 화면의 중앙으로 이동

L

커서를 화면 최하단으로 이동

z-

현재 행을 화면의 최하단으로 이동

[n]H

커서를 위에서 n행으로 이동

[n]L

커서를 아래에서 n행으로 이동

<Ctrl>+u

반 화면 위로 스크롤

<Ctrl>+d

반 화면 아래로 스크롤

<Ctrl>+b

한 화면 위로 스크롤

<Ctrl>+f

한 화면 아래로 스크롤

gg, 1G

문서의 맨 첫 행으로 이동

G

문서의 맨 마지막 행으로 이동

[n]G

n행으로 이동

:[n]<CR>

n행으로 이동

   

[ 삭제 ]

[명령모드]

[설명]

x, dl

커서 위치의 글자 삭제

X, dh

커서 바로 앞의 글자 삭제

dw

한 단어를 삭제

d0

커서 위치부터 행의 처음까지 삭제

D, d$

커서 위치부터 행의 끝까지 삭제

dd

커서가 있는 행을 삭제

dj

커서가 있는 행과 그 다음 행을 삭제

dk

커서가 있는 행과 그 앞 행을 삭제

   

[ 복사 & 붙이기 ]

[명령모드]

[설명]

[명령모드]

[설명]

yy

커서가 위치한 한 행 복사

p

붙여넣기

[n]yy

커서가 위치한 이후로 n행 복사

[n]p

n번만큼 붙여넣기 반복

   

[ 블록 지정 관련 ]

[명령]

[설명]

[명령]

[설명]

v

블록 지정

<Ctrl>+v

비쥬얼 블록 지정

~

대소문자 전환

d

삭제

y

복사

c

치환

>

행 앞에 탭 삽입

<

행 앞에 탭 제거

:

선택된 영역에 대하여 ex명령

J

행을 합침

U

대문자로 만듦

u

소문자로 만듦

   

[ 문자열 탐색 및 치환 ]

[ex모드]

[설명]

/[문자열]

문자열을 탐색

: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//new/g

:%s/old/new/g와 동일

 

[ vim 정규 표현식 ]

[메타문자]

[설명]

[메타문자]

[설명]

^

행의 첫 문자([]안에서는 not의 의미)

$

행의 끝

.

아무 문자나 한 문자 의미

\|

or의 의미

[ ]

[]사이의 문자 중 하나

\{min,max\}

min 이상 max 이하 반복됨

*

앞의 내용이 0번 이상 반복됨

\+

앞의 내용이 1번 이상 반복됨

\<

단어의 시작

\>

단어의 끝

\n

새 행 문자

\t

탭 문자

 

[ vim 확장 정규 표현 문자열 ]

[이스케이프]

[설명]

\i (소문자 아이)

변수 지정에 사용되는 문자들 [_0-9A-Za-z]

\I (대문자 아이)

\i와 같지만 숫자는 제외

\k

keyword로 사용하는 문자 [_\.\-0-9A-Za-z]

\K

\k와 같지만 숫자는 제외

\f

파일 이름으로 사용하는 문자

\F

\f와 같지만 숫자는 제외

\p

프린트 가능한 문자

\P

\p와 같지만 숫자는 제외

\s

whitespace character(공백과 탭)

\S

non-whitespace character

\d

숫자 [0-9]

\D

숫자가 아닌 문자 [^0-9]

\x

16진수 숫자 [0-9A-Fa-f]

\X

16진수 숫자가 아닌 문자 [^0-9A-Fa-f]

\o

8진수 숫자 [0-7]

\O

8진수 숫자가 아닌 문자 [^0-7]

\w

영문 단어에서 사용되는 문자 [0-9A-Za-z-]

\W

영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-]

\h

영문 단어의 시작에 사용되는 문자 [A-Za-z-]

\H

영문 단어의 시작에 사용되지 않는 문자 [^A-Za-z-]

\a

모든 알파벳 [A-Za-z]

\A

알파벳이 아닌 문자 [^A-Za-z]

\l (소문자 엘)

소문자 [a-z]

\L

소문자가 아닌 문자 [^a-z]

\u

대문자 [A-Z]

\U

대문자가 아닌 문자 [^A-Z]

\e

<ESC>

\t

<TAB>

\r

캐리지 리턴 (CR)

\b

백스페이스(BS)

\n

새 행(LF)

   

[ POSIX 문자 클래스 ]

[문자 클래스]

[내용]

[:alnum:]

알파벳과 숫자 [A-Za-z0-9]

[:alpha:]

알파벳 [A-Za-z]

[:cntrl:]

제어 문자

[:blank:]

탭과 공백 문자

[:digit:]

숫자 [0-9]

[:graph:]

제어 문자와 공백 문자를 제외한 문자

[:lower:]

소문자 [a-z]

[:upper:]

대문자 [A-Z]

[:print:]

제어 문자를 제외한 문자. 즉 프린터 할 수 있는 문자

[:punct:]

[:graph:] 문자 중 [:alnum:]을 제외한 문자. (ex: !, @, #, $, %, ^....)

[:space:]

화이트 스페이스 (ex: 공백, 탭, 캐리지 리턴, 새 행, 수직 탭, 폼 필드)

[:xdigit:]

16진수

   

[ 파일 버퍼 관련 명령 요약 ]

[ex모드]

[설명]

:buffers

버퍼의 내용을 나열

:files or :ls

버퍼의 내용을 나열

:b[n]

n번 버퍼로 이동

:bd[N]

n 버퍼를 삭제(n이 없으면 현재의 버퍼를 완전 삭제)

:bw[n]

n 버퍼를 완전 삭제(n이 없으면 현재의 버퍼를 완전 삭제)

:bp[n]

이전 버퍼로 이동. n을 붙이면 n번만큼 이전 버퍼로 이동

:bn[n]

이후 버퍼로 이동. n을 붙이면 n번만큼 이후 버퍼로 이동

:sb[n]

창을 수평 분할하여 n번 버퍼를 로드

:bf

첫 번째 버퍼로 이동

:bl

마지막 버퍼로 이동

:al

현재 열려 있는 모든 버퍼를 수평 분할 창에 로드

   

[ 마킹 및 마킹한 위치로 이동 ]

[명령모드]

[설명]

[명령모드]

[설명]

ma

a로 마킹, mb는 b로 마킹...

  

  

`a

a로 마킹된 위치로 돌아감

'a

a로 마킹된 행의 처음으로 돌아감

' '

직전에 커서가 위치하던 행의 처음

` `

진전의 커서 위치로 이동

' "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동

` "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동

   

[ 다중 창 관련 명령 ]

-[ 창 생성 ]-

[명령모드]

[ex모드]

[결과]

<Ctrl>+w s

:sp[plit]

현재 파일을 두 개의 수평 창으로 나눔

<Ctrl>+w v

:[n]vs[plit]

새로운 수직 창 생성, n이 붙으면 n칸 크기의 창 분할

<Ctrl>+w n

:new

새로운 수평 창 생성

<Ctrl>+w ^

  

수평 창으로 나누고 이전 파일의 오픈

<Ctrl>+w f

  

창을 수평으로 나누고 커서 위치의 파일을 오픈

<Ctrl>+w i

  

커서 위치의 단어가 정의된 파일을 오픈

-[ 창 삭제 ]-

<Ctrl>+w q

:q[uit]!

현재 커서의 창을 종료

<Ctrl>+w c

:clo[se]

현재 커서의 창을 닫음

<Ctrl>+w o

:on[ly]

현재 커서의 창만 남기고 모든 창 삭제

-[ 창 이동 ]-

<Ctrl>+wh

  

왼쪽 창으로 커서 이동

<Ctrl>+wj

  

아래쪽 창으로 커서 이동

<Ctrl>+wk

  

위쪽 창으로 커서 이동

<Ctrl>+wl

  

오른쪽 창으로 커서 이동

<Ctrl>+ww

  

창을 순차적으로 이동

<Ctrl>+wp

  

가장 최근에 이동한 방향으로 이동

<Ctrl>+wt

  

최상위 창으로 이동

<Ctrl>+wb

  

최하위 창으로 이동

-[ 창 위치 바꾸기 ]-

<Ctrl>+wr

  

순차적으로 창의 위치를 순환

<Ctrl>+wx

  

이전 창과 위치를 바꿈

-[ 창 크기 조정 ]-

<Ctrl>+w =

  

창의 크기를 모두 균등하게 함

<Ctrl>+w _

  

수평 분할에서 창의 크기를 최대화

<Ctrl>+w |

  

수직 분할에서 창의 크기를 최대화

<Ctrl>+w [n]+

:res[ize] +n

창의 크기를 n행만큼 증가 (Ctrl+w +는 1행만큼 증가)

<Ctrl>+w [n]-

:res[ize] -n

창의 크기를 n행만큼 감소 (Ctrl+w -는 1행만큼 증가)

<Ctrl>+w [n]>

  

창의 크기를 오른쪽으로 n칸만큼 증가(수직 창에 한함)

<Ctrl>+w [n]<

  

창의 크기를 왼쪽으로 n칸만큼 증가(수직 창에 한함)

   

[ ctags 관련 명령 ]

[ex모드]

[설명]

:ta [tag] or <Ctrl>+]

[tag]가 정의된 위치를 나열하고 선택한 위치로 점프. 현재 위치는 stack에 push된다.

:ts [tag] or :서 [tag]

:po or <Ctrl>+t

stack top에 저장된 위치를 pop하고 그 위치로 점프

:sts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시

:stj [tag]

:tn

tj나 ts로 점프했을 때 다음 tag로 점프

:tp

tj나 ts로 점프했을 때 이전 tag로 점프

:tr

tj나 ts로 점프했을 때 처음 tag로 점프

:tl

tj나 ts로 점프했을 때 마지막 tag로 점프

:pts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지

:ptj [tag]

미리보기 윈도우에 tag가 정의된 형식을 보임

:ptn

ptj나 pts로 점프했을 때 다음 tag로 점프

:ptp

ptj나 pts로 점프했을 때 이전 tag로 점프

:ptr

ptj나 pts로 점프했을 때 처음 tag로 점프

:ptl

ptj나 pts로 점프했을 때 마지막 tag로 점프

   

[ cscope 관련 명령 ]

:cs find {질의 종류} {심볼}
ex_) :cs find s start_kernel

0 or s

이 C symbol 찾기

1 or g

이 정의 찾기

2 or d

이 함수에 의해 불려지는 함수들 찾기

3 or c

이 함수를 부르는 함수들 찾기

4 or t

Find assignments to

6 or e

이 egrep 패턴 찾기

7 or f

이 파일 찾기

8 or i

이 파일을 포함하는 파일들 찾기

Posted by devanix
2009. 12. 20. 15:09
~/.vimrc.html
  1 """"""""""""""""""""""""""""""""""
  2 " personal Vim initializations   "
  3 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  4 "+-----------------------------+                                    "
  5 "| General                     |\-----------------------------------"
  6 "+_____________________________+ | Comment                          "
  7 "\______________________________\|=================================="
  8 set nocompatible                "| 오리지널 vi와 호환성 제거        "
  9 set noexrc                      "| don't use local version of .(g)vimrc, .exerc
 10 set fileformats=unix,dos,mac    "|    
 11 set background=dark             "| 배경색을 어두운 색으로 설정      "
 12 set history=1000                "| vi 편집기록을 1000까지 기억      "
 13 set nobackup                    "| backup 파일 생성 안함            "
 14 filetype on                     "| 파일의 종류를 자동으로 인식      "
 15 filetype plugin on              "|                                  "
 16 filetype plugin indent on       "|                                  "
 17 syntax on                       "| syntax highlighting on           "
 18 "+_______________________________|=================================="
 19 "\_______________________________\
 20 "
 21 "
 22 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 23 "+-----------------------------+                                    "
 24 "| Vim UI                      |\-----------------------------------"
 25 "+_____________________________+ | Comment                          "
 26 "\______________________________\|=================================="
 27 set title                       "| 타이틀바에 현재 편집중인 파일 표시
 28 set lazyredraw                  "| MACRO 사용중에 화면을 다시 그리지 않음
 29 set cursorline                  "| 현재 라인 강조                   "
 30 "set cursorcolumn               "| 현재 컬럼 강조                   "
 31 set laststatus=2                "| 상태 라인 항상 표시              "
 32 set incsearch                   "| 검색(/,?)시 구문 강조            "
 33 set hlsearch                    "| 검색어 강조                      "
 34 "set list                       "| <TAB>, <CR> 출력 서식 표시       "
 35 set ruler                       "| 커서의 위치 항상 표시            "
 36 set number                      "| 줄번호 표시                      "
 37 set showmode                    "| 모드 변환시 화면에 표시          "
 38 set showcmd                     "| 입력되는 명령 표시               "
 39 set showmatch                   "| (), {} 일치하는 괄호의 짝을 보여줌
 40 set mps+=<:>                    "| 괄호짝 찾기 기능에 사용자 괄호 종류 추가
 41 "\_______________________________\
 42 if !has("gui_running")          "|
 43     set t_Co=256                "|
 44 endif                           "|
 45 colorscheme wombat256           "|
 46 "+_______________________________|=================================="
 47 "\_______________________________\
 48 "For detail cursorline color setting
 49 ":hi CursorLine    cterm=none ctermbg=darkred ctermfg=white guibg=darkred guifg=white
 50 "
 51 "
 52 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 53 "+-----------------------------+                                    "
 54 "| Text Formatting/Layout      |\-----------------------------------"
 55 "+_____________________________+ | Comment                          "
 56 "\______________________________\|=================================="
 57 set cindent                     "| C스타일의 들여쓰기               "
 58 set autoindent                  "| 자동들여쓰기                     "
 59 set smartindent                 "| 좀더 지능적인 들여쓰기           "
 60 "set expandtab                  "| 탭을 입력하면 공백문자로 변환    "
 61 set paste                       "| 붙여넣기시 자동들여쓰기 하지 않음"
 62 set ignorecase                  "| 검색시 대소문자 구별 하지 않음   "
 63 set nowrap                      "| 자동 줄바꿈 안함                 "
 64 set shiftwidth=4                "| >> , << 사용시 들여쓰기 간격     "
 65 set softtabstop=4               "| <TAB>키를 눌렀을때 표시되는 간격 "
 66 set tabstop=8                   "| '\t' 문자를 몇칸으로 보일지 결정 "
 67 "+_______________________________|=================================="
 68 "\_______________________________\
 69 "
 70 "
 71 """"""""""""""""""""""""""""""""""
 72 "+-----------------------------+ "
 73 "| Key Mapping                 |\"
 74 "+_____________________________+ |
 75 "\______________________________\|
 76 map <F2> $v]}zf
 77 map <F3> zo
 78 map <C-F11> :cw<CR>
 79 "
 80 " CTRL-A is Select all
 81 noremap <C-A> ggVG
 82 "================================"
 83 " 파일 버퍼 간 이동
 84 "================================"
 85 map <C-h>   :bp<CR>
 86 map <C-l>   :bn<CR>
 87 map <C-k>   :bf<CR>
 88 map <C-j>   :bl<CR>
 89 map ,1 :b!1<CR>
 90 map ,2 :b!2<CR>
 91 map ,3 :b!3<CR>
 92 map ,4 :b!4<CR>
 93 map ,5 :b!5<CR>
 94 map ,6 :b!6<CR>
 95 map ,7 :b!7<CR>
 96 map ,8 :b!8<CR>
 97 map ,9 :b!9<CR>
 98 map ,0 :b!10<CR>
 99 map ,w :bwipeout<CR>
100 "+_______________________________|
101 "\_______________________________\
102 
103 
104 
105 "+-----------------------------+  
106 "| Plugin                      |\ 
107 "+_____________________________+ |
108 "\______________________________\|
109 "| 
110 """"""""""""""""""""""""""""""""""
111 " [ http://www.vim.org/scripts/script.php?script_id=159 ]
112 "+{ Minibufexplorer 
113 """"""""""""""""""""""""""""""""""
114 map <F8> :TMiniBufExplorer<CR>
115 let g:miniBufExplSplitBelow=0   "| 미니버퍼위치 0=위, 1=아래
116 let g:miniBufExplMaxSize=1
117 let g:miniBufExplSplitToEdge=1
118 "let g:miniBufExplMapWindowNavVim=1 
119 "let g:miniBufExplMapWindowNavArrows=1 
120 "let g:miniBufExplMapCTabSwitchBufs=1
121 "let g:miniBufExplModSelTarget=1 
122 " }
123 "
124 """"""""""""""""""""""""""""""""""
125 " [ http://www.vim.org/scripts/script.php?script_id=273 ]
126 "+{ TagList
127 """"""""""""""""""""""""""""""""""
128 map <F5> :TlistToggle<CR>
129 let Tlist_Ctags_Cmd='/usr/bin/ctags'
130 let Tlist_Inc_Winwidth=0
131 let Tlist_WinWidth = 20
132 let Tlist_Exit_OnlyWindow=1
133 let Tlist_Use_Right_Window=1      "분할 창을 오른쪽에 배치
134 " }
135 
136 
137 
138 """"""""""""""""""""""""""""""""""
139 " CTAGS 설정
140 """"""""""""""""""""""""""""""""""
141 set tags=./tags,/usr/include/tags
142 set tags+=/usr/src/linux-source/tags
143 
144 if version >= 500
145 func! Sts()
146         let st = expand("<cword>")
147         exe "sts ".st
148 endfunc
149 nmap ,st :call Sts()<cr>
150 
151 func! Ts()
152         let st = expand("<cword>")
153         exe "ts ".st
154 endfunc
155 nmap ,ts :call Ts()<cr>
156 
157 func! Tj()
158         let st = expand("<cword>")
159         exe "tj ".st
160 endfunc
161 nmap ,tj :call Tj()<cr>
162 
163 endif
164 
165 
166 "+-----------------------------+  
167 "| Manpage                     |\ 
168 "+_____________________________+ |
169 "\______________________________\|
170 func! Man()
171         let sm = expand("<cword>")
172         exe "!man -S 2:3:4:5:6:7:8:9:tcl:n:l:p:o:1 ".sm
173 endfunc
174 "nmap ,ma :call Man()<cr><cr>
175 map <S-k> :call Man()<cr><cr>
176 "+_____________________________+ |
177 "\_______________________________\~
178 "

'Essential Tools > VIM - Vi IMproved' 카테고리의 다른 글

Vim 편집기로 스크립트 작성하기  (0) 2011.09.23
[VIM Plugin] T-Commant  (0) 2011.09.22
[VIM Plugin] snipMate  (0) 2011.09.22
[VIM] 단축키 정리  (0) 2011.06.27
Posted by devanix