์์ง๊น์ง๋ NeoVim์ ๋ถ์์ ํ ํน์ฑ์ผ๋ก ์ธํด ์ด๊ฒ์ด ์ฆ์ ์คํ ๊ฐ๋ฅํ์ง ์์ ์๋ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ด์จ๋ ์์ฒญํ๊ณ ์ถ์ต๋๋ค.
์ฒซ์งธ, ์ ๋ ฅ์ ์ NeoVim์ด ์ง์ํ์ง ์๋ bindeval ๋ฉ์๋์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์คํจํฉ๋๋ค. ์ด๊ธฐ ๋๋ฒ๊น ์ ์๋ํ๊ณ Powerline์ด 703๋ณด๋ค ํฐ ๋ฒ์ ์ ๊ฐ์งํ ๋ Vim์ 7.4 Python API์ ์์กดํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. NeoVim์ ํ์ฌ ๋ฒ์ 704๋ก ๋ณด๊ณ ํ์ง๋ง Vim์ 7.4 Python API์ ๋ํ ์ง์์ ์ถ๊ฐํ์ง ์์์ต๋๋ค(neovim์ ๋ํ ํ ๋ก ์ฐธ์กฐ /neovim#1898), ๋ถ๋ช ํ bindeval ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. powerline์ ๋ฒ์ ํ์ธ์ ์์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํ ํ์๋ ์ฌ์ ํ ๋ค์ ๋ฌธ์ ๊ฐ ํ์๋ฉ๋๋ค.
Error detected while processing function PowerlinePyeval..provider#python#Call:
line 1:
NameError("name 'powerline' is not defined",)
"์ ๋ ฅ์ "์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. :py import sys; print sys.path
์คํํ๋ ๊ฒ์ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ๋ถ๋ง ์์ด :py import powerline
๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๊ธฐ๋ก์ ์ํด ์ ๋ Python 2.7์ด homebrew๋ฅผ ํตํด ์ค์น๋๊ณ powerline 2.0์ด pip๋ฅผ ํตํด ์ค์น๋ Mac OS 10.10์์ ์ต์ NeoVim(NVIM 0.0.0-alpha+201501262108)์ ์คํํ๊ณ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ท๋ฐ์นจํ๊ณ ์ถ์ผ์ ๊ฐ์? ํ์๊ธ์ ๊ฒ์ํ์ญ์์ค! ์ฐ๋ฆฌ๋ Bountysource ๋ฅผ ํตํด ํ์๊ธ์
@abstiles powerline
์ฐพ์ ์ ์๋ ๊ฒ์ powerline
๋ชจ๋๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. __main__
๋ชจ๋์ ์์ ๊ฒ์ผ๋ก ์์๋๋ powerline.vim.VimPowerline
ํด๋์ค์ ์ธ์คํด์ค์
๋๋ค. ๋ง์ฝ์
python foo = 1
foo
๋ณ์๋ฅผ _other_์ ์ถ๊ฐํ๋ฉด __main__
๋ชจ๋ ๋ฐ์ธ๋ฉ์ด ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ๊ฒฝ์ฐ์๋ pyeval
๊ฐ ์ฒ์์ ์ถ๊ฐ๋ ๋ฐ๋ก ๊ทธ ์ด์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๋๋ฌด ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ฏ๋ก ์ด์ Vim์ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ ค๊ณ ํด์๋ ์ ๋ฉ๋๋ค. ํ์ผ์ ํ ๋ฒ์ ๋ช KiB์์ ๋ช MiB๋ก ์ ์กํ๊ณ ์ ๋ ฅ์ ์ ํด๋น ๋ฐ์ดํฐ ์๋์ ๊ฒฐ์ฝ ๊ทผ์ ํ์ง ์์์ง๋ง ๋ฌธ์์ด์ ๋คํํ๋ ๋ฐ๋ ์ฌ์ ํ ๋ง์ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. NeoVim์ ์์ผ์ ํตํด msgpack์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์๋๊ฐ ํจ์ฌ ๋๋ ค์ง ๊ฒ์
๋๋ค. Vim ๋ฐ์ธ๋ฉ์ ๋๋์ ์ผ๋ก ๋ค์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ NeoVim ์ง์์ ๊ณง ์ถ๊ฐํ์ง ์์ ์์ ์
๋๋ค.
&statusline
\/
pyeval
\/
โฆ
\/
segment function
\/
vim.eval
\/
result
\/
displayed statusline
๊ด์ฐฎ์ง๋ง
&statusline
\/
:python --------msgpack-rpc------> โฆ > segment function
\/
vim_eval <-------msgpack-rpc------- vim.eval
\/
eval result (C) --------msgpack-rpc------> result (Python)
\/
displayed stl <-------msgpack-rpc------- segment function result
(๋ชจ๋ ๊ฒฝ์ฐ์: Vim๊ณผ์ ์ผ๋ถ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋๋ ๊ฐ ์ธ๊ทธ๋จผํธ ๊ธฐ๋ฅ์ ๋ํด ๋ฐ๋ณต๋จ) ์ด๊ฒ์ด ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๋ ํ ์คํธ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๋ด๊ฐ ๋ณผ ์์๋ ์ ์ผํ ๋์์
startup notification -------msgpack-rpc-------> powerline
\/
โฆ
\/
segment.startup
\/
&statusline function <------msgpack-rpc-------- list of things needed from NeoVim
\/
computed list of things ----------msgpack-rpc-----------------------------+
|
&statusline |
\/ |
:python (+computed list of things) -------msgpack-rpc-------> renderer | -----> โฆ > segment function
\/ \/ \/
displayed statusline <------msgpack-rpc-------- cached result result
|
&statusline +---------------------+
\/ |
:python (+computed list of things) -------msgpack-rpc-------> renderer | -----> โฆ > segment function
\/ \/ \/
displayed statusline <------msgpack-rpc-------- cached result result
|
โฆ
, ํ์ง๋ง ๋ณด์๋ค์ํผ NeoVim์์ ํ์ํ ํญ๋ชฉ์ด ๊ณ์ฐ๋๋ ์์ ๊ณผ ํ์๋๋ ์์ ์ฌ์ด์ ์ง์ฐ์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ณ์ฐ๋ ๊ฒ์ด ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ฌ์ ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ผ๋ฏ๋ก ์ง์ฐ์ด ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ์ง ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ค์ ์ฐ๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
์ํ ํ์์ค ๊ธฐ๋ฅ์ด ์ง์์ ์ผ๋ก ์ฌ๋ฌผ์ ๊ณ์ฐํ์ฌ ์ ๋ ฅ์ ์ผ๋ก ๋ณด๋ด๊ณ ์ ๋ ฅ์ ์ด ์ค๋น๋๋ฉด &statusline์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ๊ณ์ ๋ณด๋ด๋ ๋์๋ ์์ง๋ง ์ธ๊ทธ๋จผํธ ๊ธฐ๋ฅ์ ๋ค์ ์์ฑํด์ผ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ค๋ฅด์ง ์์ผ๋ฉฐ ์ด ๋ณํ์ด ์คํ๋ ค ํธํ๋์ง ์์ต๋๋ค. Vim๊ณผ ํจ๊ป.
๋ชฉ๋ก์ ์ผ๋ถ ํญ๋ชฉ์ ์กฐ๊ธ ๋ ๋น ๋ฅธ NeoVim ์ด๋ฒคํธ๋ก ๋์ฒด๋ ์ ์์ต๋๋ค.
์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ์ง ๋ชปํ๋๋ผ๋ ์ต์ํ ์ด ์์
์ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น์? ๋ฒ์ ์กฐ๊ฑด์ 703
์์ 704
ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ ๋ฅผ ์ป์ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Error detected while processing function provider#python#Call:
line 1:
NameError("name 'powerline' is not defined",)
๋์ ์:
Error detected while processing function provider#python#Call:
line 1:
AttributeError("'Nvim' object has no attribute 'bindeval'",)
NameError("name 'powerline_setup' is not defined",)
NameError("name 'powerline_setup' is not defined",)
๋๋์ ๋ํ ํ
์คํธ ์ถ๊ฐํ๋ฉด hasattr(vim, 'bindeval')
์ ๋ํ ํธ์ถํ๊ธฐ ์ ์ bindeval
์ด๋ค์ด ์์ด, ๋ ๊ทธ๋ฅ ์ป์ :
Error detected while processing function provider#python#Call:
line 1:
NvimError('Key not found',)
๊ทธ๋์ ์ ํํ ์ด๋ค ๊ธฐ๋ฅ์ด ์์๋์๋์ง ๊ทธ๋ฆฌ๊ณ /๋๋ <=703์ด ํ์ฌ ์๋ํ๋์ง, ๊ทธ๋ ๋ค๋ฉด Powerline์ด NeoVim๊ณผ ํจ๊ป ์ด์ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ด ์ ํํ ๊ถ๊ธํฉ๋๋ค.
NeoVim์ ๋ฒ์ 7.0์์๋ ์ ์ฒด Python API๋ฅผ ์ง์ํ์ง _์์ต๋๋ค_. ๋ช ๊ฐ์ง ์ฑ๋ฅ ์ธก์ ์ ์ํด ์๋ํ๋๋ก ํ๋ ๋ฐ ์ฌ์ฉํ ์ ๋ ฅ์ ์ฉ ํจ์น๊ฐ ์์ผ๋ฉฐ ๋ช ๊ฐ์ง if
์ถ๊ฐํ๋ ๊ฒ ์ด์์
๋๋ค. ์ฆ, neovim/python-client#85, neovim/python-client#84, neovim/python-client#87์ ์ฐธ์กฐํ์ญ์์ค.
์ ๋ง๋ค, ๋ชป์๊ฒผ๋ค. ๋งํฌ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด ๋ฌธ์ ๋๋ ๊ด๋ จ Neovim ๋ฌธ์ ์ ๋ํ ์๋ก์ด ํ๋์ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ต๋๋ค. Powerline์ด Neovim์ ์ง์ํ ๊ณํ์ด ์์ ์ ๋๋ก Neovim๊ณผ Powerline ์ฌ์ด์ ๋จ์ํ ์๋ฆฝํ ์ ์๋ ์ฐจ์ด์ ์ด ์์ต๋๊น?
์ฌ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํฌ๋ง์ด ์๋์ง ์๋๋ฉด Neovim์์ Powerline์ ์ฌ์ฉํ๋ ค๋ ํฌ๋ง์ ํฌ๊ธฐํด์ผ ํ๋์ง ์๊ณ ์ถ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ํ ํฌํ๋ ์ถ๊ฐํ ์ ์์ต๋๊น?
๋ค์ค๋น๊ณผ ํจ๊ป ์๋ํ๋ ์ ๋ ฅ์ ์ ๋ํ ์ข์ ๋์์ด ์์ต๋๊น?
@phiche ์ฒดํฌ ์์ https://github.com/bling/vim-airline
๋ฉ์ง! ์๋ํฉ๋๋ค! @aarobc ๊ฐ์ฌํฉ๋๋ค!
๋ค์ค๋น๊ณผ ํ์๋ผ์ธ ์ค ์ ํ์ด ๋๋ฌด ์ด๋ ต๋ค์...
+โ
@code-hunger vim-airline ์ powerline๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ neovim๊ณผ ์ ์๋ํฉ๋๋ค.
@kierun ๋๋ถ์ ๊ฑฐ์ ๊ฐ์ ์ผ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํญ๊ณต์ฌ์ ์ ์ผํ ๋จ์ ์ ์ ๋ ฅ์ ๊ณผ ๋ณ๋๋ก ๊ตฌ์ฑํด์ผ ํ๊ณ bash, weechat/irssi, tmux ๋ฑ์์ ์ด๋ฏธ ์ ๋ ฅ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ... ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ์ฝ๊ฐ ์ฑ๊ฐ์ญ๋๋ค.
@Goddard ๋ค์์ ์ดํด๋ณด์ญ์์ค.
https://github.com/edkolev/promptline.vim
https://github.com/edkolev/tmuxline.vim
์ ํ๋ก์ ํธ๋ bash, zsh, fish ๋ฐ tmux์ฉ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉฐ ์์ฑ๋ ์คํฌ๋ฆฝํธ๋ python๊ณผ ๊ฐ์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ํธ์ถํ์ง ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋์ ๋๋ค.
์ ๋ nvim์ผ๋ก ์ ํํ๊ณ ์์ผ๋ฉฐ ์ด์ ๋ํ Powerline ์ง์์ ๋ณด๊ณ ์ถ์ต๋๋ค.
์ธ๋ชจ์๋ "+1"์ ์ฌ์ฉํ์ฌ ์ด ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ์คํธํ๋ ๊ฒ์ ์ค์งํ ์ ์์ต๋๊น? ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์์ "๋ฐ์" github ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ธ์.
๋ง์ฐฌ๊ฐ์ง๋ก ๋์๊ฐ์ "+1" ๋๊ธ์ ์ญ์ ํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
์ง๊ธ์ 2019๋ (๊ฑฐ์ 2020๋ )์ด๊ณ ์ฌ์ ํ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. nvim์์ Powerline์ด ์๋ํ๋๋ก ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด vim์์๋ง ์ฌ์ฉํ ์ ์์ต๋๊น?
@vegerot ์ ๋ ์ค๋ ์ ์ ํฌ๊ธฐํ๊ณ ์ฆ์ ์ฌ์ฉํ ์ ์๊ณ dein ๋๋ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ์์ ํจ๊ป ์ค์นํ ์ ์๋ vim-airline ์ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋คโฆ
5 1/2๋ , ๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ์ ํ ์๋ํ์ง ์์ต๋๊น? ์ด ์ํ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋๋ ์ด๊ฒ์ด ๋ฏธ๋์ ์ด๋ ์์ ์์ ์๋ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
5 1/2๋ , ๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ์ ํ ์๋ํ์ง ์์ต๋๊น? ์ด ์ํ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋๋ ์ด๊ฒ์ด ๋ฏธ๋์ ์ด๋ ์์ ์์ ์๋ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
์ฌํ๊ฒ๋ NeoVim์ ์ง์ํ๋ ๋ฐ ์ง์ ์ด ์๊ณ ์ด ๋ฌธ์ ์ ๋ํ @ZyX-I ์๋ ์๊ฒฌ์ ๋ณด๋ฉด ๋ฏธ๋์ ๋ํด ๊ทธ๋ค์ง ๋๊ด์ ์ด์ง ์์ต๋๋ค. ์๋ง๋ NeoVim์ ๊ทธ ์ฌ์ด์ ํ์ด์ฌ ์ง์๊ณผ ๊ด๋ จํ์ฌ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ์ ๊ฒ์ด๋ฏ๋ก(๋ด๊ฐ ์์ง ๋ชปํจ) ์ด๊ฒ์ ๋ค์ ์ดํด๋ณด๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์๊ณ ๊ทธ๋ค์ด ๊ทธ๋ ๊ฒ ํ์ง ์๋๋ค๋ฉด ๋๋ NeoVim ์ง์์ด ๊ฐ๊น์ด ์ฅ๋์ (์ ์ด๋ ๋์ ์ํด) ์ถ๊ฐ๋ ๊ฒ์ด๋ผ๊ณ ๋๊ดํ์ง ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค.
๊ด๋ จ ์์: ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ณผ๋คํ "+1" ๋๊ธ์ ์ ๊ฑฐํ์ต๋๋ค.
์ต์ํ ์ด ์ค๋ฅ๋ฅผ ์จ๊ธธ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ ๊ฒฝ์ฐ์๋ powerline์ด ์๋ ๋ ๊ฐ์ง neovim์ ๋ชจ๋ ๊ฐ๊ณ ์ถ์ต๋๋ค.
์ต์ํ ์ด ์ค๋ฅ๋ฅผ ์จ๊ธธ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ ๊ฒฝ์ฐ์๋ powerline์ด ์๋ ๋ ๊ฐ์ง neovim์ ๋ชจ๋ ๊ฐ๊ณ ์ถ์ต๋๋ค.
๋ค์์ ์๋ํ ์ ์์ต๋๋ค. .vimrc
์์ ๋ชจ๋ ์ ๋ ฅ์ ๊ด๋ จ ์ฝ๋๋ฅผ if !has('nvim') ... endif
๋ธ๋ก์ ๋ฃ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ธ๋ชจ์๋ "+1"์ ์ฌ์ฉํ์ฌ ์ด ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ์คํธํ๋ ๊ฒ์ ์ค์งํ ์ ์์ต๋๊น? ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์์ "๋ฐ์" github ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ธ์.