Vim/GVim => Neovim/Neovim-qt 마이그레이션할 때 수행한 작업
Neovim
에 대응시켰으므로, 변경점을 써 갑니다.XDG Base Directory Specification
Neovim의 설정 파일은 XDG Base Directory Specification
라는 사양에 따릅니다.
자세한 사양은 이 근처이 참고가 될 것입니다.
간단히 말하면, 설정 파일은 ~/.config
이하, 유저 고유의 캐시 파일등은 ~/.local/cache
이하에 배치하는 등, 각 어플리케이션 관계의 파일을 통일적으로 관리하기 쉽게 하는 것이 목적의 사양입니다.
Neovim의 설정 파일은 ~/.config/nvim/init.vim
에 배치하는 것이 관례가 되어 있어, 이 사양에 따르고 있다고 말할 수 있습니다.
파일 구성
Neovim 마이그레이션에 있어 기존의 Vim 설정을 모두 ~/.vimrc
에 쓰고 있던 사람은 거의 그대로 ~/.config/nvim/init.vim
에 copipe로 끝납니다.
그러나 나는 이전의 기사에 쓴 것처럼, 설정을 여러가지 분할해 관리하고 있었으므로, 그대로 copipe 하면 외부 파일을 읽어들일 수 없거나 하고, 일근줄로는 가지 않았습니다.
대응책으로서, 설정 파일을 두는 PATH를 Vim 환경 변수로 설정해, 외부 파일을 읽어들이는 부분에서 그것을 사용하는 형태로 했습니다.
또한 Vim과 Neovim을 공존시키기 위해, 기점의 설정 자체는 종래대로 ~/.vimrc
에 써, ~/.config/nvim/init.vim
에 Symlink를 붙였습니다.
이전에 ~/.vim
에 배치했던 파일군은 XDG 사양에 따라 ~/.config/vim
로 이동했습니다.
폴더 구조 자체는 변하지 않습니다.
~/.config/nvim/init.vim
~/.config/nvim/init.vim(~/.vimrc)let $XDG_VIM_HOME = $HOME.'/.config/vim'
set runtimepath+=$XDG_VIM_HOME
set runtimepath+=$XDG_VIM_HOME/after
runtime! init/*.vim
runtime! functions.vim
첫 번째 줄에서 구성 파일의 PATH를 환경 변수 XDG_VIM_HOME
로 설정했습니다.
이후, 외부의 파일을 읽어들일 때는 반드시 이 환경 변수를 사용합니다.
아래 줄에서 이것을 사용하여 runtimepath를 추가하고 있습니다.
dein.vim 설정
dein.vim
자체의 다운로드와 플러그인의 설치 처리를 vim/init/10_dein.vim
에 쓰고 있습니다.
설치할 플러그인 목록은 dein.toml
및 dein_lazy.toml
로 이동하고 있으므로 vim/init/10_dein.vim
에서 이러한 파일을 읽습니다.
이 때의 로드처 지정을 $XDG_VIM_HOME
로 재기입했습니다.
vim/init/10_dein.vim ...
if dein#load_state(s:dein_dir)
call dein#begin(s:dein_dir)
- let s:toml = expand($HOME.'/.vim/dein.toml')
- let s:lazy_toml = expand($HOME.'/.vim/dein_lazy.toml')
+ let s:toml = expand($XDG_VIM_HOME.'/dein.toml')
+ let s:lazy_toml = expand($XDG_VIM_HOME.'/dein_lazy.toml')
call dein#load_toml(s:toml, {'lazy': 0})
call dein#load_toml(s:lazy_toml, {'lazy': 1})
call dein#end()
call dein#save_state()
endif
...
플러그인 설정 파일 불러오기
dein.vim
에서 로드하는 플러그인 설정은 dein.toml
또는 dein_lazy.toml
에 포함할 수 있지만,
나는 별도로 설정 파일을 만들고 그것을 읽는 방법을 취하고 있습니다.vim/plugins/*.vim
는 해당 구성 파일입니다.
이 설정 파일을 dein.toml
와 dein_lazy.toml
로부터 읽어들일 때의 PATH 지정을 재기입했습니다.
vim/dein.toml ...
[[plugins]]
repo = 'osyo-manga/vim-over'
- hook_add = 'source $HOME/.vim/plugins/vim-over.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/vim-over.vim'
[[plugins]]
repo = 'tyru/caw.vim'
- hook_add = 'source $HOME/.vim/plugins/caw.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/caw.vim'
[[plugins]]
repo = 'thinca/vim-splash'
- hook_add = 'source $HOME/.vim/plugins/vim-splash.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/vim-splash.vim'
...
Vim/Neovim에서 플러그인 분리
어느 한쪽에서만 사용하는 플러그인은 다른 한쪽에서는 읽고 싶지 않기 때문에 dein.vim
의 기능인 on_if
옵션 + has
함수를 사용해 잘라 냈습니다.
dein_lazy.toml...
[[plugins]]
repo = 'Shougo/deoplete.nvim'
on_i = 1
on_if = 'has("nvim")'
hook_source = 'source $XDG_VIM_HOME/plugins/deoplete.vim'
[[plugins]]
repo = 'Shougo/neocomplete.vim'
on_i = 1
on_if = '!has("nvim")'
hook_source = 'source $XDG_VIM_HOME/plugins/neocomplete.vim'
...
옵션 분리
클립보드 연계 등 Vim/Neovim에서 설정 방법이 다른 옵션도 있습니다.
여기도 플러그인과 마찬가지로 has
함수로 분기했습니다.
vim/init/20_general.vim...
if has('nvim')
set clipboard=unnamedplus
else
set clipboard=unnamed,autoselect
endif
...
PATH 문제로 조금 막혔지만 Vim과 거의 같은 설정을 Neovim에서도 움직일 수 있게 되었습니다.
물론 Vim도 지금까지 제대로 작동하고 있습니다.
Reference
이 문제에 관하여(Vim/GVim => Neovim/Neovim-qt 마이그레이션할 때 수행한 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/s4kr4/items/b55896460e58a1737c76
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let $XDG_VIM_HOME = $HOME.'/.config/vim'
set runtimepath+=$XDG_VIM_HOME
set runtimepath+=$XDG_VIM_HOME/after
runtime! init/*.vim
runtime! functions.vim
...
if dein#load_state(s:dein_dir)
call dein#begin(s:dein_dir)
- let s:toml = expand($HOME.'/.vim/dein.toml')
- let s:lazy_toml = expand($HOME.'/.vim/dein_lazy.toml')
+ let s:toml = expand($XDG_VIM_HOME.'/dein.toml')
+ let s:lazy_toml = expand($XDG_VIM_HOME.'/dein_lazy.toml')
call dein#load_toml(s:toml, {'lazy': 0})
call dein#load_toml(s:lazy_toml, {'lazy': 1})
call dein#end()
call dein#save_state()
endif
...
...
[[plugins]]
repo = 'osyo-manga/vim-over'
- hook_add = 'source $HOME/.vim/plugins/vim-over.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/vim-over.vim'
[[plugins]]
repo = 'tyru/caw.vim'
- hook_add = 'source $HOME/.vim/plugins/caw.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/caw.vim'
[[plugins]]
repo = 'thinca/vim-splash'
- hook_add = 'source $HOME/.vim/plugins/vim-splash.vim'
+ hook_add = 'source $XDG_VIM_HOME/plugins/vim-splash.vim'
...
어느 한쪽에서만 사용하는 플러그인은 다른 한쪽에서는 읽고 싶지 않기 때문에
dein.vim
의 기능인 on_if
옵션 + has
함수를 사용해 잘라 냈습니다.dein_lazy.toml
...
[[plugins]]
repo = 'Shougo/deoplete.nvim'
on_i = 1
on_if = 'has("nvim")'
hook_source = 'source $XDG_VIM_HOME/plugins/deoplete.vim'
[[plugins]]
repo = 'Shougo/neocomplete.vim'
on_i = 1
on_if = '!has("nvim")'
hook_source = 'source $XDG_VIM_HOME/plugins/neocomplete.vim'
...
옵션 분리
클립보드 연계 등 Vim/Neovim에서 설정 방법이 다른 옵션도 있습니다.
여기도 플러그인과 마찬가지로 has
함수로 분기했습니다.
vim/init/20_general.vim...
if has('nvim')
set clipboard=unnamedplus
else
set clipboard=unnamed,autoselect
endif
...
PATH 문제로 조금 막혔지만 Vim과 거의 같은 설정을 Neovim에서도 움직일 수 있게 되었습니다.
물론 Vim도 지금까지 제대로 작동하고 있습니다.
Reference
이 문제에 관하여(Vim/GVim => Neovim/Neovim-qt 마이그레이션할 때 수행한 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/s4kr4/items/b55896460e58a1737c76
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
...
if has('nvim')
set clipboard=unnamedplus
else
set clipboard=unnamed,autoselect
endif
...
Reference
이 문제에 관하여(Vim/GVim => Neovim/Neovim-qt 마이그레이션할 때 수행한 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s4kr4/items/b55896460e58a1737c76텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)