4. vim¿¡ Ãß°¡µÈ ±â´Éµé

4.1. multi-window

vimÀº ¸ÖƼ À©µµ¿ì ±â´ÉÀ» Áö¿øÇÕ´Ï´Ù. ÀÌ ±â´ÉÀº âÀ» ºÐÇÒÇØ¼­ ÇϳªÀÇ vi ¿¡ ¿©·¯ °³ÀÇ ÆÄÀÏÀ» º¸¸é¼­ ÆíÁýÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ´Â ±â´ÉÀÔ´Ï´Ù. :sp ·Î âÀ» ºÐ ÇÒÇϰųª [ctrl]-wn À¸·Î âÀ» »õ·Î ¸¸µé ¼ö ÀÖ½À´Ï´Ù. â°£ÀÇ À̵¿Àº command ¸ðµå ¿¡¼­ [ctrl]-ww³ª [ctrl]-wk, [ctrl]-wj µîÀ¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. Á÷Á¢ ÇØº¸½Ã´Â ÆíÀÌ ÀÌÇØ°¡ ½¬¿ì¸®¶ó´Â »ý°¢ÀÌ µå³×¿ä. âÀ» ´ÝÀ» ¶§´Â °¢ â¿¡¼­ ÆÄÀÏÀ» ´Ý¾Æµµ µÇ°í [ctrl]-wc ·Î ´ÝÀ» ¼ö ÀÖ½À´Ï´Ù. Àú´Â °³/ÀÎ/Àû/À¸·Î´Â â ±â´ÉÀ» °ÅÀÇ ¾²Áö ¾Ê½À´Ï ´Ù. °¡¶àÀ̳ª ÀûÀº ¸ð´ÏÅÍ¿¡ â±îÁö ºÐÇÒÇÏ¸é º¼ ¼ö ÀÖ´Â ³»¿ëÀÌ ÁÙ¾îµå´Ï±î¿ä. ^^ ¹°·Ð :resize µîÀÇ ¸í·ÉÀ̳ª [ctrl]-w+ [ctrl]-w- [ctrl]-w=µîÀÇ ¸í·ÉÀ¸·Î âÀÇ Å©±â ÀÇ Á¶ÀýÀÌ °¡´ÉÇÕ´Ï´Ù. ÀÌ·¯¸é Á» ¾µ¸¸ÇÕ´Ï´Ù.

4.2. È®Àå Á¤±ÔÇ¥Çö½Ä

¾Æ·¡ ³»¿ëÀº vim ÆÐŰÁö¿¡ Æ÷ÇÔµÈ Á¤±ÔÇ¥Çö½Ä¿¡ »ç¿ëµÇ´Â ±âÈ£µéÀÔ´Ï´Ù. ÀÌ °ÍµéÀÌ ´Ù ÇÊ¿äÇÑÁö´Â Àǽɽº·´±º¿ä. À§¿¡¼­µµ Àá±ñ ¸»ÇßµíÀÌ ÀÚÁÖ »ç¿ëµÇ´Â Á¤±Ô½Ä µéÀ» ±âȣȭ ÇØ ³õ¾ÒÀ» »ÓÀÔ´Ï´Ù.
 	Character classes {not in Vi}:
\i \i isident=@,48-57,-,192-255 ¿¡ ÇØ´çÇÏ´Â ±ÛÀÚµéÀÔ´Ï´Ù.
set isident ¸í·ÉÀ¸·Î È®ÀÎ ¹× Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
\I \I \i¿Í °°Áö¸¸ ¼ýÀÚ´Â Á¦¿Ü
\k \k keyword·Î »ç¿ëÇÏ´Â ¹®ÀÚ, set iskeyword Âü°í
\K \K \k¿Í °°Áö¸¸ ¼ýÀÚÁ¦¿Ü
\f \f ÆÄÀÏÀ̸§À¸·Î »ç¿ëÇÏ´Â ¹®ÀÚ, set isfnameÂü°í
\F \F \f¿Í °°Áö¸¸ ¼ýÀÚ Á¦¿Ü
\p \p ÇÁ¸°Æ® °¡´ÉÇÑ ¹®ÀÚ, set isprintÂü°í
\P \P \p¿Í °°Áö¸¸, ¼ýÀÚ Á¦¿Ü
\s \s whitespace character: [Space] and [Tab]
\S \S non-whitespace character opposite of \s
\d \d digit: [0-9]
\D \D non-digit: [^0-9]
\x \x hex digit: [0-9A-Fa-f]
\X \X non-hex digit: [^0-9A-Fa-f]
\o \o octal digit: [0-7]
\O \O non-octal digit: [^0-7]
\w \w word character: [0-9A-Za-z-]
\W \W non-word character: [^0-9A-Za-z-] 
\h \h head of word character: [A-Za-z-] 
\H \H non-head of word character: [^A-Za-z-] 
\a \a alphabetic character: [A-Za-z] 
\A \A non-alphabetic character: [^A-Za-z] 
\l \l lowercase character: [a-z] 
\L \L non-lowercase character: [^a-z] 
\u \u uppercase character: [A-Z] 
\U \U non-uppercase character [^A-Z] 
\e \e [ESC] 
\t \t [tab] 
\r \r [CR] 
\b \b [BS]
\n \n matches [NL] Not available yet! Will be used 
for multi-line patterns 
~ \~ matches the last given substitute string 
			

4.3. visual mode

vim¿¡¼­ [ctrl]-v ¸¦ ´©¸¥ ä·Î À̵¿À» ÇÏ¸é ¹ÝÀüµÈ ¿µ¿ªÀÌ »ý±â´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. óÀ½¿¡ [ctrl]-v¸¦ ´©¸£¸é blockÀ¸·Î ¿µ¿ªÀÌ »ý±é´Ï´Ù. À̶§ v¸¦ ÀÔ·Â ÇÏ¸é ¿µ¿ªÀÌ ¹®ÀÚ ´ÜÀ§·Î ÀâÈ÷°í, V¸¦ ´©¸£¸é ¶óÀδÜÀ§·Î ¿µ¿ªÀÌ »ý±é´Ï´Ù.
				¼±ÅÃµÈ ¿µ¿ªÀÌ »ý°åÀ» ¶§ ¾µ ¼ö ÀÖ´Â ¸í·Éµé 
~	´ë¹®ÀÚ <-> ¼Ò¹®ÀÚ Àüȯ
d	»èÁ¦
c	ġȯ
y	¹öÆÛ¿¡ º¹»ç
>	set shiftwidth·Î Á¤ÀÇÇØ ³õÀº ¸¸Å­ ¿ì·Î À̵¿
<	set shiftwidth·Î Á¤ÀÇÇØ ³õÀº ¸¸Å­ Á·ΠÀ̵¿
:	¼±ÅÃÇÑ ¿µ¿ª¿¡ ´ëÇØ¼­ ex ¸í·ÉÀ» ¼öÇà
J	ÁÙÀ» ÇÕÄ£´Ù.
U	´ë¹®ÀÚ·Î ¸¸µç´Ù.
u	¼Ò¹®ÀÚ·Î ¸¸µç´Ù.
^]	tag¸¦ ã´Â´Ù.
	
´ë¹®ÀÚ <-> ¼Ò¹®ÀÚ Àüȯ »èÁ¦ ġȯ ¹öÆÛ¿¡ º¹»ç set shiftwidth·Î Á¤ÀÇÇØ ³õÀº ¸¸Å­ ¿ì·Î À̵¿ set shiftwidth·Î Á¤ÀÇÇØ ³õÀº ¸¸Å­ Á·ΠÀ̵¿ ¼±ÅÃÇÑ ¿µ¿ª¿¡ ´ëÇØ¼­ ex ¸í·ÉÀ» ¼öÇà ÁÙÀ» ÇÕÄ£´Ù. ´ë¹®ÀÚ·Î ¸¸µç´Ù. ¼Ò¹®ÀÚ·Î ¸¸µç´Ù. tag¸¦ ã´Â´Ù.

4.4. tag stack

tag¶õ ÇÑ ¸¶µð·Î ¼³¸íÇÏÀÚ¸é tags ÆÄÀÏ¿¡ Á¸ÀçÇÏ´Â Á÷Á¢ À̵¿À» À§ÇÑ Ç¥½ÃÀÔ ´Ï´Ù. (³»¿ëÀ» º¸¸é À̰͵µ ¸ÅÅ©·ÎÀÔ´Ï´Ù.--) ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ùº¸¸é ÇÔ¼öÀÇ ³»¿ë À» ¾Ë°í ½ÍÀº °æ¿ì°¡ »ý±âÁÒ. ÀÌ·± ¶§ ±× ÇÔ¼ö·Î Á÷Á¢ À̵¿À» Çß´Ù°¡ ´Ù½Ã ÆíÁýÇÏ´ø °÷À¸·Î À̵¿À» ÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í ÇսôÙ.
main.c

void main(){
hello()
bye()
}
			
my.h
					
void hello(){
puts(Hello, vi user)
}
void bye(){
puts(Good bye)
}
			
ÀÚ ÀÌÁ¦ ctags·Î tags ÆÄÀÏÀ» ¸¸µì´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÇ°ÚÁö¿ä. :!ctags *.[ch] ȤÀº ´Ù¸¥ ¼¿»ó¿¡¼­ [nu11@foo vi-test]$ ctags *.[ch] ÀÌÁ¦ tag stackÀÇ ±â´ÉÀ» Ȱ¿ëÇØ º¾½Ã´Ù. vi main.c·Î main.c¸¦ ¿­¾îº¾½Ã´Ù. hello() ¾ÕÀ¸·Î À̵¿À» ÇÕ´Ï´Ù. ¾î¶»°Ô °¥Áö´Â ¾Ë¾Æ¼­µé ÇϽñæ... ÀÌ À§Ä¡¿¡¼­ [ctrl]] ۸¦ ´©¸¨´Ï´Ù. (^]ÀÔ´Ï´Ù. ÄÁÆ®·Ñ۸¦ ´©¸¥ »óÅ¿¡¼­ ]) È­¸éÀÌ ¹Ù²î¸é¼­ void hello(){ ÀÇ ¸Ç ¾Õ¿¡ hello°¡ À§Ä¡ÇÏ°Ô µÇÁÒ. ÇÔ¼öÀÇ ³»¿ëÀ» È®ÀÎÇÏ¿´À¸¸é ´Ù½Ã [ctrl]t¸¦ ´© ¸¨´Ï´Ù. ´Ù½Ã ¿ø·¡ À§Ä¡·Î º¹±Í¸¦ ÇÕ´Ï´Ù. ´Ù½Ã bye()°¡ ÀÖ´Â ÁÙ¿¡¼­ [ctrl]]¸¦ ´©¸£ ¸é ´Ù½Ã my.h°¡ ¿­¸®¸é¼­ void bye()ÁÙ¿¡ Ä¿¼­°¡ À§Ä¡ÇÕ´Ï´Ù. ´Ù½Ã º¹±Í´Â [ctrl]t. vimÀÇ HELP¿¡µµ tagsÈ­ÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù. :help·Î help ¹®¼­¸¦ º¸´Ùº¸¸é ||·Î µÑ·¯½ÎÀÎ °ÍµéÀÌ Àִµ¥ ÀÌ À§¿¡¼­ ^]¸¦ ´©¸£¸é HYPER TEXTó·³ ±× ÆÄÀÏ·Î À̵¿À» ÇÕ ´Ï´Ù. ´Ù½Ã ^t¸¦ ´©¸£¸é º¹±Í±¸¿ä.

4.5. ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¸í·Éµé

vim¿¡´Â tag stackÀ̿ܿ¡µµ ÇÁ·Î±×·¡¹Ö¿¡ Æí¸®ÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. ¹Ù·Î ÄÄÆÄÀÏ ÈÄ¿¡ ¿¡·¯°¡ ³­ °÷À¸·Î ¹Ù·Î À̵¿À» ÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ´Â ±â´ÉÀÔ´Ï´Ù. ¿ì¼± ÄÄÆÄÀϽÿ¡ ¸¸µé¾îÁø error ÆÄÀÏÀ» ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. ¸¸¾à¿¡ MakefileÀÌ ¸¸µé¾îÁ® ÀÖ ´Ù¸é :make ¸í·É ÇÑ ¹ø¸¸ ³»¸®¸é ÀÚµ¿À¸·Î errorfileÀÌ ¸¸µé¾îÁö°í ¿¡·¯°¡ ¹ß»ýÇÑ Çà À¸·Î À̵¿À» ÇÕ´Ï´Ù. :clÀ» ÀÔ·ÂÇÏ¸é ¿¡·¯ ¸®½ºÆ®°¡ ³ª¿À°í :cnÀ» ÀÔ·ÂÇÏ¸é ¿¡·¯°¡ ³­ ´ÙÀ½ ÇàÀ¸·Î ÀÚµ¿À¸·Î À̵¿À» ÇÕ´Ï´Ù. :cN Àº ¹Ý´ë ¹æÇâÀ¸·Î ¿¡·¯°¡ ³­ ÇàÀ¸·Î ÀÌ µ¿À» ÇÕ´Ï´Ù. ¿©·¯ ÆÄÀÏ·Î ÀÌ·ç¾îÁø ¼Ò½ºÀÇ °æ¿ì¿¡µµ ´Ù ¿­¾î°¡¸é¼­ µé¾î°©´Ï´Ù.
main.c

void added(){
This makes error
}
void main(){
hello()
bye()
added()
}
my.h

		
void hello(){
this also makes error
puts(Hello, vi user)
}
void bye(){
puts(Good bye)
}
			

Makefile

all : main.c my.h
gcc -o test main.c my.h
clean : test
rm -f test
				
ÀÌ·¸°Ô ¸¸µé¾î ³õ°í vi main.c¿¡¼­ :make¸¦ ÇØ º¾½Ã´Ù. ¿¡·¯°¡ ÇÑ ¹ø Ãâ·ÂµÈ ÈÄ¿¡ my.hÀÇ this also makes error ¶óÀο¡ Ä¿¼­°¡ À§Ä¡Çϰí viÀÇ ¸Ç ¾Æ·¡ÁÙ¿¡´Â (4 of 12): `this' undeclared (first use this function) ¶ó°í Ãâ·ÂÀÌ µÉ ²®´Ï´Ù. :cnÀ» ÇØ º¾½Ã´Ù. (5 of 12): (Each undeclared identifier is reported only once·Î ¸Þ ½ÃÁö°¡ ¹Ù²î¾úÁö¿ä. ¸î ¹ø :cnÀ» ÇÏ´Ùº¸¸é ´Ù½Ã main.cÀÇ This makes error ¶óÀο¡ Ä¿¼­°¡ À§Ä¡ÇÏÁÒ. ¸î ¹ø ÇØº¸½Ã¸é ÃæºÐÈ÷ ÀÌÇØÇϸ®¶ó »ý°¢ÇÕ´Ï´Ù. Makefile ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾ø´Â°¡? ºÐ¸íÈ÷ ÀÖ°ÚÁÒ. ´Ü¼øÈ÷ ÄÄÆÄÀÏ ¿¡·¯ ¸Þ½ÃÁö°¡ µé¾î ÀÖ´Â ÆÄÀϸ¸ ÀÖÀ¸¸é µ¿ÀÛÀ» Çϴϱî¿ä. ÇØº¸µµ·Ï ÇÏ ÁÒ. :!gcc -c main.c >& err.out ÀÌ·¸°Ô Çϸé error ¸Þ½ÃÁö°¡ err.out¿¡ ÀúÀåÀÌ µÇ°Ú Áö¿ä. ´ÙÀ½¿¡ ÇÒ ÀÏÀº ÆÄÀÏÀ» ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÔ´Ï´Ù. :cf err.out ÀÚ ÀÌÁ¦ :makeÇß´ø °Í°ú °°ÀÌ :cnÀ» Çϸ鼭 µð¹ö±ëÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.