Code overview - minsuk-jang/teamproject GitHub Wiki

๋‹ค์Œ์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‘˜๋Ÿฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํžŒํŠธ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๋ณต์žกํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„๋“ค์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒƒ์ž…๋‹ˆ๋‹ค.

Jumping around

ctags -R์„ ์‚ฌ์šฉํ•˜์—ฌ : tag ๋ช…๋ น์— ๋Œ€ํ•œ ํƒœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค. (๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ 'ctags'๋Œ€์‹  universal-ctags๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Development-tips๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ•จ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜ ์ •์˜๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ์ปค์„œ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ด๋™ํ•˜๊ณ  CTRL-]๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋’ค๋กœ ์ด๋™ํ•˜๋ ค๋ฉด CTRL-T ๋˜๋Š” CTRL-O๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

ํŒŒ์ผ๋กœ ๊ฑด๋„ˆ ๋›ฐ๋ ค๋ฉด ์ด๋ฆ„์— ์ปค์„œ๋ฅผ ๋†“๊ณ  gf ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ๋ช…๋ฐฑํ•œ ์ด๋ฆ„ (๋ถˆ์™„์ „ํ•œ ๋ชฉ๋ก)์ด ์žˆ๋Š” ํŒŒ์ผ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • buffer.c ๋ฒ„ํผ ์กฐ์ž‘ (๋กœ๋“œ ๋œ ํŒŒ์ผ)
  • diff.c diff ๋ชจ๋“œ (vimdiff)
  • eval.c ํ‘œํ˜„ ํ‰๊ฐ€
  • fileio.c ํŒŒ์ผ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  • fold.c folding
  • getchar.c ๋ฌธ์ž ๋ฐ ํ‚ค mapping ๊ฐ€์ ธ ์˜ค๊ธฐ
  • mark.c ๋ถ€ํ˜ธ
  • mbyte.c multi-byte ๋ฌธ์ž์ฒ˜๋ฆฌ
  • memfile.c swapfile์— ๋ฒ„ํผ์šฉ lines ์ €์žฅํ•˜๊ธฐ
  • memline.c memory์— ๋ฒ„ํผ์šฉ lines ์ €์žฅํ•˜๊ธฐ
  • menu.c ๋ฉ”๋‰ด
  • message.c (์˜ค๋ฅ˜) ๋ฉ”์„ธ์ง€
  • ops.c ์—ฐ์‚ฐ์ž ์ทจ๊ธ‰ (d,y,p)
  • option.c ์˜ต์…˜
  • quickfix.c quickfix ๋ช…๋ น (: make,: cn)
  • regexp.c pattern ๋Œ€์กฐ
  • screen.c ์œˆ๋„์šฐ ์—…๋ฐ์ดํŠธ
  • search.c pattern ๊ฒ€์ƒ‰
  • spell.c ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ
  • syntax.c ๊ตฌ๋ฌธ ๋ฐ ๊ธฐํƒ€ ๊ฐ•์กฐ ํ‘œ์‹œ
  • tag.c ํƒœ๊ทธ
  • terminal.c ํ†ตํ•ฉ ํ„ฐ๋ฏธ๋„ emulator
  • undo.c ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ๋‹ค์‹œ ์‹คํ–‰
  • window.c ๋ถ„ํ•  ์œˆ๋„์šฐ ์ฒ˜๋ฆฌ

์ฃผ์š” ๋ณ€์ˆ˜

ํ˜„์žฌ ๋ชจ๋“œ๋Š” State์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ NORMAL,INSERT,CMDLINE ๋“ฑ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฐฝ์€ curwin์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„ํผ๋Š” curbuf์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฐฝ์—์„œ ์ปค์„œ ์œ„์น˜, ์˜ต์…˜ ๊ฐ’, ํŒŒ์ผ ์ด๋ฆ„ ๋“ฑ์„ ๊ฐ–๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ „์—ญ ๋ณ€์ˆ˜๋Š” globals.h์— ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์ธ ๋ฃจํ”„

์ด๊ฒƒ์€ ํŽธ๋ฆฌํ•˜๊ฒŒmain_loop ()๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ ๋‹ค์Œ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด normal_cmd ()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฆฌํ„ด๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ์ƒ๊ฐ์€ Vim์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Vim์ด ๋ฌธ์ž ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณณ์ด ๋ช‡ ๊ตฐ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด vgetc ()ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ mapping์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ™”๋ฉด ์—…๋ฐ์ดํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ช…๋ น์ด๋‚˜ ์ผ๋ จ์˜ ๋ช…๋ น์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์—ฐ๊ธฐ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ update_screen ()์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. win_update ()๋Š” ๋ชจ๋“  ์œˆ๋„์šฐ์— ๋Œ€ํ•ด win_line ()์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ screen.c์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ช…๋ น ์ค„ ๋ชจ๋“œ

:๋ฅผ ํƒ€์ดํ”„ โ€‹โ€‹ํ•  ๋•Œ, normal_cmd ()๋Š” getcmdline ()์„ ํ˜ธ์ถœํ•˜์—ฌ Ex ๋ช…๋ น์œผ๋กœ ๋ผ์ธ์„ ์–ป์Šต๋‹ˆ๋‹ค.
getcmdline ()์€ ๊ฐ ์ž…๋ ฅ ๋œ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌ ํ•  ๋ฃจํ”„๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. <CR>, `' ๋˜๋Š” ๋ช…๋ น ํ–‰ ๋ชจ๋“œ๋ฅผ ๋๋‚ด๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž๋ฅผ ์น˜๋ฉด ๋˜๋Œ์•„์˜ต๋‹ˆ๋‹ค.

Ex ๋ช…๋ น

Ex ๋ช…๋ น์€ do_cmdline ()ํ•จ์ˆ˜์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
: ๋ช…๋ น ํ–‰์˜ ์ผ๋ฐ˜ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ๋ณ„๋„ ๋ช…๋ น์— ๋Œ€ํ•ด do_one_cmd ()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. while ๋ฃจํ”„๋„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

do_one_cmd ()๋Š” ๋ฒ”์œ„์™€ ์ผ๋ฐ˜ ์ธ์ž๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ exarg_t์— ๋„ฃ๊ณ  ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์— ๋„˜๊น๋‹ˆ๋‹ค.

: ๋ช…๋ น์€ ex_cmds_defs.h์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์˜ ์„ธ ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์€ ๋ช…๋ น์— ์‚ฌ์šฉ๋˜๋Š” flag์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋ชจ๋“œ ๋ช…๋ น

ํ‘œ์ค€ ๋ชจ๋“œ ๋ช…๋ น์€ normal_cmd ()ํ•จ์ˆ˜์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ ํƒ์  ๋ช…๋ น ์ˆ˜์™€ ์ผ๋ถ€ ๋ช…๋ น์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์— cmdarg_t๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

normal.c์— nv_cmds ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์€ ๋ชจ๋“  ๋ช…๋ น์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์˜ ๋‘ ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋ชจ๋“œ ๋ช…๋ น ์‚ฝ์ž…

i ๋˜๋Š” a ๋ช…๋ น์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ, normal_cmd ()๋Š” edit ()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๋ฃจํ”„๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฝ์ž… ๋ชจ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์˜ต์…˜

options.c์—๋Š” options []๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์˜ต์…˜ ์ด๋ฆ„ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๊ฐœ์š” (์‹œ๊ฐํ™”)

facebook / pfff๋กœ ์ƒ์„ฑ ๋œ ์ฝ”๋“œ ์‹œ๊ฐํ™”

โš ๏ธ **GitHub.com Fallback** โš ๏ธ