Como compartilhar a configuração entre o vim e o Neovim

23

Comecei a usar o neovim e mudei o meu .vimrcpara .config/nvim/init.vime outras coisas .local/share/nvim.

Qual é a melhor maneira de compartilhar configurações ou plugins entre o vim e o Neovim? Symlinks? Posso alterar os diretórios no .vimrc para usar apenas um link simbólico?

Depois de migrar minha configuração do vim para o local padrão do Neovim, isso parece funcionar quase:

ln -s ~/.local/share/nvim/site ~/.vim 
ln -s .config/nvim/init.vim .vimrc

Alguns plugins (usando o vim-plug ) parecem não funcionar corretamente. Não consigo carregar cores personalizadas nem vim-airlines.

lumbric
fonte
1
você pode usar if has('nvim')para os comandos apenas nvim
wizzup

Respostas:

37

TL; DR

Você pode usar seus ~/.vimrcarquivos, arquivos e plug-ins existentes , ~/.vimsem precisar vincular os arquivos.

E isso agora está documentado no manual do NeoVim, consulte Transição do Vim .


As linhas abaixo adicionarão os caminhos e ~/.vimrcarquivos existentes à sua configuração do nvim.

set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath=&runtimepath
source ~/.vimrc

Para Linux e macOS, basta adicionar as linhas acima na parte superior do seu ~/.config/nvim/init.vimou %LOCALAPPDATA%\nvim\init.vimno Windows.

O crédito vai para 👉 este

Saúde 🍻
Chris

ipatch
fonte
8

Tendo sua configuração no local padrão do Neovim, faça o seguinte:

mkdir -p ~/.local/share/nvim/site
ln -s ~/.local/share/nvim/site ~/.vim 
ln -s .config/nvim/init.vim .vimrc

Para corrigir o esquema de cores , tive que definir o modo de cor do terminal 256 , ou seja, adicione-o ao seu arquivo .vimrc (= init.vim), que será ignorado pelo nvim :

set t_Co=256  " Note: Neovim ignores t_Co and other terminal codes.

Para obter o vim-airlines, adicionei o seguinte trecho ao .vimrc:

set laststatus=2

Não entendo bem por que isso é necessário apenas no vim e não no Neovim, mas não sou o único que tropeça nessa coisa.

lumbric
fonte
1
Isso sempre foi necessário no vim. Provavelmente o nvim define isso como padrão e é por isso que está funcionando lá.
Christian Brabandt
1
@ChristianBrabandt sim, é claro que você está certo.
Lumbric 3/07
Acho que geralmente as pessoas terão ~/.vimrclocalizado na pasta pessoal, como a linha anterior apontando para ~/.vim.
Konrad
É melhor seguir a outra resposta , para que se possa ter uma configuração específica do nvim, enquanto isso fornece ~/.vimrccomo configuração compartilhada.
Ryenus 18/09/19
Embora o Neovim ignore as t_xxopções, eu diria que é mais correto envolver algo assim if !has('nvim'), como neste exemplo . Pode ignorá-los agora, mas e se isso mudar no futuro? Também indica implicitamente que a opção está relacionada apenas ao Vim.
ZeroKnight 19/09/18
5

Você pode usar if has('nvim'). Aqui estão alguns exemplos completos:

Configuração apenas para Neovim:

if has('nvim')
        tnoremap <Esc> <C-\><C-n>
endif

Configuração apenas para Vim

if !has('nvim')
    set ttymouse=xterm2
endif
Mark Stosberg
fonte
1

O método aqui tenta ligar simbolicamente ~/.config/nvima ~/.vim, e fazer o conf compatível com vim.

# nvim conf dir: ~/.config/nvim
# vim conf dir: ~/.vim
# link the 1st as the 2nd with relative links

# Prepare a vimrc file in ~/.config/nvim folder
ln -sf ./init.vim ~/.config/nvim/vimrc

# Link the whole ~/.config/nvim folder as ~/.vim foler
ln -sf ./.config/nvim ~/.vim

Após essa configuração, ~/.config/nvim/init.vimo arquivo real é usado como conf. ~/.vim/vimrcé apenas um link para ele.

Agora precisamos fazer o gerenciador de plugins de vimreutilização nvim, plugins, alterando runtimepathe packpath. De fato, os caminhos do plug-in são reutilizados automaticamente, a seguinte correção é reutilizar o gerenciador de plug-ins.

let g:is_nvim = has('nvim')
let g:is_vim8 = v:version >= 800 ? 1 : 0

" Reuse nvim's runtimepath and packpath in vim
if !g:is_nvim && g:is_vim8
  set runtimepath-=~/.vim
    \ runtimepath^=~/.local/share/nvim/site runtimepath^=~/.vim 
    \ runtimepath-=~/.vim/after
    \ runtimepath+=~/.local/share/nvim/site/after runtimepath+=~/.vim/after
  let &packpath = &runtimepath
endif

Fonte: Compartilhar confs entre vim e nvim

Simba
fonte
1

Apenas para adicionar à resposta do ipatch, que é a resposta correta, se você tiver uma configuração ligeiramente diferente do Vim, poderá ser necessário adaptar o caminho.

Por exemplo, no Windows, em vez de usar a configuração padrão com:

$HOME
   +--.vimrc
   +--.vim

Estou usando:

$HOME
   +--vimfiles
          +--vimrc

(O motivo é que é mais fácil colocar um único diretório sob controle de revisão do que um arquivo e um diretório, principalmente quando o arquivo está na raiz do diretório inicial)

O seguinte funciona para mim, então:

set runtimepath^=~/vimfiles runtimepath+=~/vimfiles/after
let &packpath=&runtimepath
source ~/vimfiles/vimrc
Xavier T.
fonte