Vim ํŽธ์ง‘๊ธฐ์˜ ํ˜„๋Œ€ํ™”๋œ ๋ฒ„์ „์ธ Neovim 0.7.0 ์ถœ์‹œ

ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜ Vim ํŽธ์ง‘๊ธฐ์˜ ํฌํฌ์ธ Neovim 0.7.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” 2.0๋…„ ๋„˜๊ฒŒ Vim ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์žฌ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ์ฝ”๋“œ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์—ฌ๋Ÿฌ ์œ ์ง€ ๊ด€๋ฆฌ์ž ๊ฐ„์— ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๊ณ , ๊ธฐ๋ณธ ๋ถ€๋ถ„์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค(์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‚ด๋ถ€๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์›๋ž˜ ๊ฐœ๋ฐœ์€ Apache XNUMX ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋˜๋ฉฐ ๊ธฐ๋ณธ ๋ถ€๋ถ„์€ Vim ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. Linux(appimage), Windows ๋ฐ macOS์šฉ์œผ๋กœ ์ค€๋น„๋œ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Neovim์„ ๋งŒ๋“ค๊ฒŒ ๋œ Vim์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜๋Š” 300๋งŒ ์ค„์ด ๋„˜๋Š” C(C89) ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๋น„๋Œ€ํ•˜๊ณ  ๋ชจ๋†€๋ฆฌ์‹ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค๋งŒ์ด Vim ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋‰˜์•™์Šค๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ•œ ๋ช…์˜ ๊ด€๋ฆฌ์ž์— ์˜ํ•ด ์ œ์–ด๋˜๋ฏ€๋กœ ํŽธ์ง‘๊ธฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. GUI๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Vim ์ฝ”์–ด์— ๋‚ด์žฅ๋œ ์ฝ”๋“œ ๋Œ€์‹  Neovim์€ ๋‹ค์–‘ํ•œ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ๋ ˆ์ด์–ด ์‚ฌ์šฉ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Neovim์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ MessagePack ํ˜•์‹์ด ์‚ฌ์šฉ๋˜๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ์€ ํŽธ์ง‘๊ธฐ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด TCP ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— Neovim์€ Vim๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  Vimscript(Lua๊ฐ€ ๋Œ€์•ˆ์œผ๋กœ ์ œ๊ณต๋จ)๋ฅผ ๊ณ„์† ์ง€์›ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ํ‘œ์ค€ Vim ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Neovim์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ Neovim ์ „์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์•ฝ 130์—ฌ๊ฐœ์˜ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby)์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Qt, ncurses, Node .js, Electron, GTK). ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์˜ต์…˜์ด ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. GUI ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋‹ฌ๋ฆฌ Neovim ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Neovim ๋‚ด์—์„œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์€ ์›๊ฒฉ ์ž‘์—…์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์—์„œ Neovim์„ ์‹คํ–‰ํ•˜๊ณ  ๋ณ„๋„์˜ ui_client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ์—์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Python 2์— ๋Œ€ํ•œ ์ง€์› ์ค‘๋‹จ, ํ‚ค๋งต์—์„œ Lua ํ•จ์ˆ˜ ์‚ฌ์šฉ ํ—ˆ์šฉ, API์— ์ƒˆ ๋ช…๋ น ์ถ”๊ฐ€, ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ ๋ฐ ๊ตฌ์„ฑ ๊ด€๋ฆฌ์— Lua ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํฌ๊ฒŒ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฌธ์ œ ์ง„๋‹จ ๋„๊ตฌ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ๊ณ  ์ „์—ญ ์ƒํƒœ ํ‘œ์‹œ์ค„์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ LSP ํด๋ผ์ด์–ธํŠธ(Language Server Protocol)์˜ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์–ด ๋ถ„์„ ๋กœ์ง ๋ฐ ์ฝ”๋“œ ์™„์„ฑ์„ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€