C editing with VIM HOWTO

Siddharth Heroor

Fj - {

yasufumi.haga@nifty.com

Revision History                                                        
Revision v1.0           2001N114           Revised by: sh          
2ŁBԈႢCB                                           
Revision v0.1           2000N124           Revised by: sh          
ŁBtB[hobN҂Ă܂B                                        

́̕AC C++, JavaƂ\̌ŏt@C
ҏWۂ̓҂ƂȂ̂łB



Table of Contents
1. ͂߂
2. ܂
   
    2.1. w, e,  b ̃L[Xg[N
    2.2. {, }, [[  ]] ̃L[Xg[N
    2.3. % L[Xg[N
   
3. C ̃t@C̒̏ȈʒuɃWv
   
    3.1. ctags
    3.2. }[N
    3.3. gd L[Xg[N
   
4. P̎⊮
5. IȐ`
   
    5.1. ̐
    5.2. R[hIɃCfg
    5.3. 
   
6. ̃t@CҏW
7. Quickfix
8. 쌠
9. Ql
10. {Ŏӎ

1. ͂߂

̖̕ړI C ŏĂt@CVIMŕҏW鎞ɗpł
AҏWIvVVIM̏S҃[U[ɏЉ邱ƂłB̕ł
R}hL[Xg[NЉ܂Âg
AVIM C ̃t@CҏWۂ́AvO}̐Yグ̂
𗧂Ƃł傤B

̓̕éAVIMǂg C ̃t@CҏWł̂
邱ƂłBł̓ȇ唼 vi ɂKpł̂A
A C ̃t@CҏWɊւĐGĂ̂ C++  Java, 
đ̎ɂȂ菬ȂKpł̂łB



2. ܂

2.1. w, e,  b ̃L[Xg[N

t@C̒𓮂܂ɂw, e  b ƂL[g܂BVIM
 C ̃vOɂlXȃg[Nʂł܂B

ȉ̂悤 C ̃R[hlĂ݂܂B

Figure 1. C vÖꕔ

[moving1]

J[\ if ̐擪̈ʒuɂƂ܂B w 񉟂ƃJ[\
 (ɃWv܂Bx w ^CvƁÃJ[\ NULL
Ɉڂ܂B̎̓J[\ == g[NɈړł傤Bȍ~
̃L[Xg[Nł́Â悤Ɉړ܂B x... )... &&... y... >... 
z... čŌ )... łB

e  w ƎĂ܂A݃J[\ꏊ̌t̍ŌɈڂ̂ł
āA̎̌t̍ŏɂ͈ڂȂ_Ⴂ܂B

b wƂ͐΂ŁAJ[\͋tɓ܂B b ̃L[Xg[
NgΌɈړł܂B



2.2. {, }, [[  ]] ̃L[Xg[N

{  } ͒iiւƈړ̂Ɏg܂B C ҏWĂ鎞
ɂ́ÃL[͈Ӗ኱Ă܂B C ł͒iƂ̂
sŕꂽs̉򂾂ƌȂ̂łB



Figure 2.  C vÖꕔ

[moving2]

̗ł͒iĂ܂Biʂ̒iւ͊ȒPɈړ
܂B{  } ƂL[g΂̂łB{ ̓J[\iǂ
̕ɈړĂA}̓J[\iǂĉ̕ɈړĂ܂
B

lɂ͂ꂼR[fBOX^CAXe[gg̘_IȏW
Aȏ̋sŕĕނĂ܂B



Figure 3. ʂ C vÖꕔ

[moving3]

{  } L[͂󋵂ł͔ɖ𗧂̂łBuiv
̒iւƂƂĂȒPɈړł̂łB

ɗʂ̃L[̑g[[  ]] ̃L[łB̃L[g
ŏ̌ɂ钼O { ₠邢͎ { ɃWvł܂B



Figure 4. C ̃R[h̎̈ꕔ

[moving4]

foo() ҏWĂƂāAx bar() ҏWƂ܂傤B
ŒP ]] ƃ^CvĂBƃJ[\ bar() ֐̍ "{"
Ɉڂ͂łBt͎኱Ă܂Bbar() ̒قǂɂƂāA
[[ ƃ^CvƁAJ[\͍ŏ "{" A܂ bar() g̍ŏAɈ
̂łB foo() ̍ŏɈڂɂ͂x [[ ƃ^CvȂ΂Ȃ
܂BłL[łɁA 2[[ ƃ^Cv΁Aŏ̃L[X
g[NŃJ[\𒼑O̊֐̍ŏɂĂ̂łB

悤ȃL[Xg[ŃAʂ̑g ][  [] łB][ ƃJ[
\͍ŏ̌ɂA } Ɉڂ܂B foo() ҏWĂƂ
foo() ̍ŌɍsƂ܂B̏ꍇ ][ łɍs܂Bl
Abar() ̕ҏW foo() ̍Ōɍsꍇ́A[] J[\
Ă܂B

L[Xg[N̊ołAčl΂̂łBŏ̃L[Xg
[N͏オ邩邩Ă܂B [オŁA ] łB
̃L[Xg[N͈v銇ʂ̃^CvĂ܂BÕL[Xg
[NƓȂJ[\ { Ɉړ͂ł傤AL[Xg[N
Ⴆ΁AJ[\ } Ɉړł傤B

]], ][, [[  [] ̃L[Xg[NŒӂ邱Ƃ́A炪ŏ̌
ɂ銇ʂƈvƂƂłBŏ̌ɂ邩ǂɊ֌W
A≺ɂ銇ʂׂĂƂĂA͂ł܂
BłVIM̃hLgɂ͉􂪏Ă܂BSĂ̊ʂ
ɂ̓L[Xg[N}bvȂ΂Ȃ܂B}bsO̎Ԃ
񂷂A߂̃}bsÔ͎ƂłB

:map [[ ?{<CTRL-VCTRL-M>w99[{

:map ][ /}<CTRL-VCTRL-M>b99]}

:map ]] j0[[%/{<CTRL-VCTRL-M>

:map [] k$][%?}<CTRL-VCTRL-M>



2.3. % L[Xg[N

% ̓J[\̂Ƃɂ̂Ɉv̂̂Ɏg܂BJ
[\̂Ƃɂ̂́AʂłAʁA劇ʂł܂܂
B% L[΁AJ[\͑ΉvʂփWvł傤
B

钆łA% L[Xg[N #if, #ifdef, #else #elif  #endif
ƈv̂̂Ɏg܂B

̃L[Xg[N͑lR[hmFۂɔɖ𗧂̂
B

Figure 5.  C ̃R[ḧꕔ

[moving5]

L̃R[h`FbNꍇɂ͊ʂƂ`FbN܂B%
͂銇ʂiΉ銇ʂ܂ŁjWv̂Ɏg܂B̋t
łB̂悤ɁAǂ̍ʂǂ̉EʂɑΉ̂A
̏găR[hmF̂ɎĝłB

悤ɁA% ͂ { Ή } ɃWv̂ɂg܂B



3. C ̃t@C̒̏ȈʒuɃWv

3.1. ctags

^OƂ̂́Aꏊ̏ێނ̂̂łB C 𗝉
肻̃t@CҏW肷ꍇɔɖ𗧂̂łB܂
Ă΂Ăꏊ炻̒`ꏊɃWvA߂
ꍇɂƂĂ𗧂܂B

ȉɂƂ܂B

Figure 6. ^O̗

[tags]

 foo() ҏWɊ֐ bar() ܂ōsƂ܂傤BāAbar() 
Ă̂mɂ̓^O𗘗p܂B̊֐̒`ɃWvāA
ꂩŖ߂Ă܂BKvȂ bar() ̒ŌĂłʂ̊֐ɃW
vāA߂Ă邱Ƃł܂B

^Ogɂ́AŏɂׂẴ\[Xt@C ctags vOs
Ȃ΂Ȃ܂B̃vO tags Ƃt@C𐶐܂B
 tags Ƃt@Cɂׂ͂Ă̊֐`wĂ|C^[
ĂAVIM͂̊֐`̏ꏊɍŝɂ̃t@Cg܂B

WvčŝɎgۂ̃L[Xg[ŃA CTRL-]  CTRL-T
ɂȂ܂B foo() ̒ bar() R[Ăꏊ CTRL-] ł
AJ[\ bar() ̍ŏɂĂ܂B hitting CTRL-T łĂ΁A
bar() foo() փWvĖ߂܂B

ctags ͎̂悤ɂČĂяo܂B


            $ ctags options file(s)                                 
                                                                    


݂̃fBNgɂ *.c t@CS tags t@CꍇA
Kv͈̂ȉ̂ƂłB


            $ ctags *.c                                             
                                                                    


ʁX̃TufBNg C ̃t@C悤ȃ\[Xc[̏ꍇɂ
Ã\[Xc[̈ԏ -R IvVt ctags Ăт܂B
Ƃ̃\[Xc[ɂ邷ׂĂ̊֐̃^O tags t@C
܂BႦΈȉ̂悤ɂ܂B


            $ ctags -R *.c                                          
                                                                    


ctags ɂ͑ɂ̃IvVg܂B̃IvV̐
 ctags  man t@Cɂ܂B



3.2. }[N

}[NƂ̂̓^OƓ悤ȁAꏊ̏ێ̂łA}[
N̓t@Ĉǂ̏ꏊɂłݒł邵A֐ enum i񋓌^jɌ
肳̂ł܂BɁA}[N̓[U[蓮Őݒ肵Ȃ
΂Ȃ܂B

}[Nݒ肵ĂÂڂɌ`Ō킯ł͂܂B
}[NƂ̂VIMoĂt@C̒̏ꏊƂȂ̂łB
̃R[hlĂ݂܂B

Figure 7. }[N̗

[marks]

 x++; ̍sҏWɑ̍sҏWÂƂ܂̍sɖ߂Ă
Ƃ܂傤B̏ꍇAm' ƂL[Xg[Nł x++; ̍sɃ}[N
ݒł邵A '' łĂ΁Ał̓sɖ߂Ă܂B

VIMł̓}[N͕ݒł܂B̃}[N a-z  A-Z  1-0
ƂWX^Ɋi[܂B}[Nݒ肵āA̓̂郌
WX^AႦ j Ɋi[ɂ mj ƑłĂ΍ς݂܂B̃}[Nɖ߂
ɂ́A 'j ƑłĂ΍ς݂܂B

̃}[NgƁA܂Ƃ܂R[h̒ōs藈肷ۂɖ{
ɖ𗧂܂BL̗g܂傤B x++; ň}[NāA y=x;
łAĂ̊ԂWvA邢͑̏ꏊɃW
vāAꂩWvĖ߂肽Ƃ邩܂B

}[Ñ͕t@Cɂ܂Ă܂܂B}[Ng
ɂ͑啶̃WX^A܂ A-Z ̃WX^gȂ΂Ȃ܂B
̃WX^̓t@C̒ŎĝŁAt@C܂邱
͂܂B΁A foo.c Ƃt@C̒Ń}[NW
X^ "a" ɐݒ肵Aꂩʂ̃t@CɈړ 'a ƑłĂAJ[\
͒Ȍꏊɂ͖߂Ȃ̂łBʂ̃t@CɃJ[\Ă
ȃ}[N΁A啶̃WX^gKvł傤BႦ
΁A ma ̑ mA głB̃t@CҏWɂĂ
ÃZNVŘ_܂B



3.3. gd L[Xg[N

̃R[ĥЂƂ܂Ƃ܂l܂B

Figure 8. OԖڂ̗

[gd]

y  z Ȃ񂾂AȂYĂ܂A厊}炪`Ă
ꏊɍsƂ܂B̕@ y Ƃ z 邱Ƃł
BłVIMɂ͂ƊȒPőf@܂Bgd ƂL[Xg
[N "Goto Declaration i錾֍sj" ̗ɂȂĂ܂BJ[\
"y" ɂ gd ƑłƁAJ[\̐錾A܂ struct Y y; ɂ
ĂłB

gD悤ȃL[Xg[NłB̓J[\̈ʒuɂϐO
[o錾Ăꏊ܂ŁAJ[\Ă܂BA x ̐錾
ɍs΁AKvȂƂ gD ƑłŁAŃJ[\ x ̐錾
Ɉړł傤B



4. P̎⊮

̃R[hl܂B

Figure 9. ⊮̗

[auto]

A_Very_Long_Function_Name() Ƃ֐́Axx^Cv̂ŁA
܂ᛂ̎ɂȂ邱Ƃ܂Bł܂}[hɂԂłA
̑OɂPTāAP⊮ł̂łBAnother_Function
() Ƃ֐̒ A_Very... ƃ^CvACTRL-P ƑłĂł傤
BŏɈvPꂪŏɕ\܂B̏ꍇ
A_Very_Long_Variable_Name ܂B⊮邽߂ɂx 
CTRL-P ƑłAɈvP܂Ō܂B̒Pꂪ
A_Very_Long_Function_Name łBPꂪAɃ^C
v𑱂܂B̉ߒ̊Ԃ͂VIM}[ĥ܂܂ł܂B

CTRL-P Ǝ̂ CTRL-N ƂL[Xg[N܂B͌
̑ɑOsȂ̂łB̃L[Xg[N͗Ƃ
At@C̐擪t@C̍Ōɍs܂Ō𑱂܂B

CTRL-P  CTRL-N  CTRL-X [hƂ[ḧꕔɂȂĂ܂B
CTRL-X [h͑}[h̃Tu[hłB}[hɂƂ
Ã[hɓ킯łB CTRL-X [h𔲂ɂ CTRL-X, CTRL-P
 CTRL-N ȊÕL[Xg[NłĂ΂łBCRTL-X
[h𔲂A}[hɖ߂܂B

CRTL-X [hg΁A܂܂ȕ@Ŏ⊮ł悤ɂȂ܂B
t@C⊮邱Ƃł܂Bwb_[t@CCN[
hȂ΂ȂȂɁA͓ɖ𗧂܂B CTRL-X [hg
Â悤Ȃ foo.h Ƃt@CCN[hł܂B

         #include "f CTRL-X CTRL-F"                                    
                                                                       

ACTRL-X CTRL-FłB킩ĂA킩ĂāBemacs݂
ł ;-) CTRL-X[hł͂ł邱Ƃɂ܂BȂ
̈⊮łBgƒP̈ꗗt@Cw肵
Agĕ⊮悤ɂłłBfBtHgƂ̎Iv
V͐ݒ肳Ă܂Bݒ肷ɂ :set dictionary=file ƂR
}hg܂B C ̃L[[h typedef  #define 
񂩂̎t@CɒuĂ܂B悤ɁA C++  Java ̃v
O}ȂANX̂Ɏ䂩邩܂B

t@C̃tH[}bg͒PłB 1 sɈ⊮P
łBA C ̎t@CƂ̂͂Ԃ񂱂Ȃ悤
̂ɂȂł傤B

Figure 10. t@C̃Tv

[dict]

⊮gɂ́A CTRL-X CTRL-K ƑłKv܂B⊮ CTRL-P
 CTRL-N ̃L[Xg[NɎĂ܂BA[ƁA "typedef" 
^CvȂA CTRL-X CTRL-K Ƒłł悭āAƁApbƏoĂ
āAO̕⊮łB



5. IȐ`

5.1. ̐

80Ƃ75ƂAłAȂ΂ȂȂƂ悭
܂B̃R}hg΁A߂ėeՂɂ̐ݒ肪łĂ܂܂B


            :set textwidth=80                                       
                                                                    


Iɂɂ́AɎ .vimrc ɂ̃R}huĂ
B

eLXg𐧌鑼ɁA錅ŃeLXg܂ԂƂł
傤B͎gĂ[K肵Ă邩炻ȂĂ
A邢͂ɂ悤ɎőI񂾂炩܂Bȏ
ɎgR}h̃R}hłB


            :set wrapwidth=60                                       
                                                                    


L̃R}h60ŃeLXg܂Ԃ悤ɂ܂B



5.2. R[hIɃCfg

C ŃR[fBOĂԂ́ÃR[h̉Cfg邱Ƃ
܂BR[fBOɂ邽߂ɁAVIMɂ cindent 
IvV܂Bݒ肷ɂ́ÃR}hg
B


            :set cindent                                            
                                                                    


cindent ݒ肷΁AR[h͎IɂꂢɂȂ܂B̃R}h
IɎsꍇ́A .vimrc ɉ邾łłB



5.3. 

VIMł͒߂`ł悤ɂȂĂ܂B߂͎O̕ɕ
邱Ƃł܂B܂ŏ̕A^̕AčŌ̕łB
Ⴆ΁ÃR[fBOX^CɕKvȏƂƂŁA
̃X^CɂKv邩܂B

                                                                       
            /*                                                         
            * ͒߂ł                                           
            */                                                         
                                                                       

̂悤ȏꍇ͎̃R}hg܂B


            :set comments=sl:/*,mb:*,elx:*/                         
                                                                    


ǎ҂̂߂ɁÃR}hǂĂ݂܂傤B̃R}hɂ͎O
܂Bŏ sl:/* ƂłB͎Oɂ킩ꂽ߂
/* Ŏn܂邱Ƃ VIM ɋĂ܂B͒߂̐^̕ *  VIM
ɍĂ܂B߂̍Ṓ̕A̂Ƃ VIM ɋĂ܂B
͂̃R}h */ ŏI˂΂ȂȂƁAĂ / ł
ƎIɒ߂˂΂ȂȂƂłB

ʂ̗Ă݂܂傤B̃R[fBOwĵ悤
܂傤B

                                                                       
            /*                                                         
            ** ͒߂ł                                          
            */                                                         
                                                                       

̂悤ȏ󋵂ł́A߂̂Ɏ̃R}hg܂B


            :set comments=sl:/*,mb:**,elx:*                         
                                                                    


߂}ɂ́A /* ƃ^Cv enter L[łłB̍sɂ
I ** Ă͂łB߂Ix enter L[
łŁAʂ ** }܂Bł߂Iɂ **/
Ȃ */ ~łˁBVIM͂ł܂ƂɌłBŌ *
폜 / ɒuKvȂłB / Ƃłĉ
B VIM͂ꂪ߂̏I肾ƔFAIɂ̍s ** 
 */ ֕ς͂łB

ƒm肽Ƃ΁ÃR}hłĉB :h comments



6. ̃t@CҏW

xɓȏ̃t@CҏWKvƂ̂͂悭邱Ƃł
BႦ΁Awb_[t@CҏWĂāAɃ\[Xt@CҏW
邱Ƃ邩܂Bxɓȏ̃t@CҏWɂ́A
̃R}hg VIM N܂B


         $ vim file1 file2 ...                                      
                                                                    


ōŏ̃t@CҏWłAȉ̃R}hgΎ̃t@CɈ
邱Ƃł܂B


         :n                                                         
                                                                    


߂ꍇ͎̃R}hg΂ł܂B


         :e#                                                        
                                                                    


̃t@C𓯎Ɍ邱ƂłāAɂ̓ؑւ邱Ƃ
ł΁AR[fBO𗧂܂B΁Aʂ𕪊
ď̕Ƀwb_[t@Cĉ̉ʂł̓\[Xt@C
΁A𗧂낤ƂƂłBVIMɂ͂ȉʂ𕪊R}h
łBNɂ͂Ɏ̂悤ɂ܂B :split

t@C̃EBhEɕ\Ǝv܂BłǂȃR}
hsĂAꂪê͂̎ɎgĂEBhE
BÃR}hg΁Aʂ̃EBhEɂʂ̃t@C
WłłB :e file2

̃R}hśA̃t@C悤ɂȂĂ̂
킩ł傤B̃EBhEɂ͍ŏ̃t@C\ĂāA
̃EBhEɂ͓Ԗڂ̃t@C\Ă܂B̓̃t@C
؂ւĎgɂ́A CTRL-W CTRL-W ƂL[Xg[NgȂ
Ȃ܂BEBhE̕ɂĂƒm肽΁A help R
}hs΂łB



7. Quickfix

C ŃR[fBOĂꍇAҏW - RpC - ҏWƂTCN
悭܂Bi̕ǂłjǎ҂ȂA܂łɐ
R}hȂǂgāAC ̃t@CҏWAt@CۑA
R[hRpCAăG[̉ӏɍsA܂ҏWn߂̂
ʂł傤BȂƂɁAQuickfixƂ[hg΁A VIM͂̃TC
NԂ኱ߖ񂷂̂Ă܂B{Iɂ́ARpC̃G
[t@CɕۑĂāÃR}hgVIMł̃t@CI
[vKv܂B


                                                                    
         $ vim -q RpC̃G[ۑt@C              
                                                                    


VIM͎IɃG[̏񂪓Ă邱̃t@CI[vāAJ[\
ŏ̃G[̈ʒuɂĂ܂B

̂ɂ͋ߓ܂B "make" ƂR}hg΁AI
R[hRpCāAŏɔG[̈ʒuɍsĂ܂B
make R}hNɂ͎̂悤Ƀ^Cv܂B


         :make                                                      
                                                                    


́ÃR}h̓VF make R[āAŏ̃G[ӏɍs
łBłRpC make ł͂Ȃ cc ̂悤ȃR}hgĂ
ꍇ́A make R}hgɎsR}h makeprg Ƃ
ϐɐݒ肵Ȃ΂Ȃ܂BႦΎ̂悤ɂłB :set makeprg=cc\
foo.c

makeprg ݒ肵Ă΁Aۂ make R}hĂяo邵A Quickfix
[hoƂł傤B

ŏ̃G[CAɂ邱Ƃ͂̎̃G[̉ӏɍsĂ
C邱Ƃł傤B̃G[̉ӏɍsɂ͈ȉ̃R}hg
܂B :cn

߂ɂ́ÃR}hg܂B :cN

gĎۂɂĂ݂邱Ƃɂ܂傤Bȉ̃R[hlĂ
B

Figure 11. t@CvÕXg

[quickfix_prog]

΂킩܂A5sڂɃG[܂B̃t@C test.c Ƃ
OŕۑĂāAmakeprg ͈ȉ̃R}hgĐݒ肵Ă
B


         :set makeprg=gcc\ test.c                                   
                                                                    


ɁA make R}h :make ƂR}hgċN܂B
gcc G[oA make R}h̏o͂ȉ̂悤Ȃ̂ɂȂ܂B

Figure 12. :make R}hŏoG[

[make_error]

RETURN ƁAJ[\6sڂɈړ܂B

x :cn R}hJ[\4sڂɂĂ܂B

ÕG[ӏɖ߂ɂ́A :cN R}hg܂BŃJ[\6
sڂɖ߂邱Ƃł傤B

5sڂ̃G[C "return 1;" ǉAx :make s
܂BƂ̏o͎͂̂悤ɂȂ܂B

Figure 13. G[

[make_no_error]

͂ق̂킸ȈłBłQuickfixgăRpCԂ
ւ肪ł邵A܂ΕҏW - RpC - ҏW̃TCN
팸ł̂łB



8. 쌠

Copyright (c) 2000,2001 Siddharth Heroor.

{̕AzzAȂ͕ύX́A Free Software Foundation s̃o
[W 1.1 Ȃȍ~ׂ̂Ẵo[W̃t[p_
iGNU Free Documentation Licensej̏ŋBAύXs
\ƁA\\ƁAї\ƁBt[
p_񏑂͈̕ȉ̃TCgŎ擾łB http://www.gnu.org/
copyleft/fdl.html <http://www.gnu.org/copyleft/fdl.html>



9. Ql

VIM Ɋւ葽͈̏ȉ̃TCg擾ł邵A VIM 
_E[hłB http://www.vim.org <http://www.vim.org>



10. {Ŏӎ

ZĂ삳A邳ɂ́Ȁ؂Č\グ
܂B܂AQׂ̎̍ȎɂAJɂ삳A
AAhoCXJɂ\グ܂B

