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