Jak współdzielić config między vimem a neovimem


23

Zacząłem używać neovim i przeniosłem się .vimrcdo niego, .config/nvim/init.vima inne rzeczy znajdują się w .local/share/nvim.

Jaki jest najlepszy sposób udostępniania konfiguracji, a nawet wtyczek między vimem a Neovimem? Symlinks? Czy mogę zmienić katalogi w .vimrc, aby używało tylko jednego dowiązania symbolicznego?

Po migracji mojej konfiguracji vima do domyślnej lokalizacji Neovim wydaje się, że działa prawie:

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

Niektóre wtyczki (przy użyciu wtyczki vim ) nie działają poprawnie. Nie mogę załadować niestandardowych kolorów ani vim-linii lotniczych.


1
możesz używać if has('nvim')tylko z poleceniami
nvim

Odpowiedzi:


38

TL; DR

Możesz korzystać z istniejących ~/.vimrc, plików i wtyczek znajdujących się wewnątrz ~/.vimbez konieczności symlinkowania plików.

Jest to teraz udokumentowane w podręczniku NeoVim, patrz Przejście z Vima .


Poniższe wiersze dodają istniejące ścieżki i ~/.vimrcpliki do konfiguracji nvim.

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

W przypadku systemu Linux i macOS wystarczy dodać powyższe wiersze na górze ~/.config/nvim/init.vimlub %LOCALAPPDATA%\nvim\init.vimw systemie Windows.

Kredyt trafia na to

na zdrowie 🍻
Chris


8

Mając swoją konfigurację w domyślnej lokalizacji Neovim, wykonaj następujące czynności:

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

Aby naprawić kolory, musiałem ustawić tryb kolorów terminalu 256 , tj. Dodać to do pliku .vimrc (= init.vim), który zostanie zignorowany przez nvim :

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

Aby uzyskać vim-linie lotnicze, dodałem następujący fragment do .vimrc:

set laststatus=2

Nie bardzo rozumiem, dlaczego jest to konieczne tylko w vim, a nie w Neovim, ale nie jestem tylko jedną przeszkodą na tej rzeczy.


1
Zawsze było to konieczne w vimie. Prawdopodobnie nvim ustawia to jako domyślne i dlatego tam działa.
Christian Brabandt

1
@ChristianBrabandt tak, oczywiście, że w porządku.
lędźwiowy

Sądzę, że zwykle ludzie będą ~/.vimrcznajdować się w folderze domowym, jak wskazuje poprzednia linia ~/.vim.
Konrad,

Lepiej postępować zgodnie z drugą odpowiedzią , aby można było mieć konfigurację specyficzną dla nvim, tymczasem pozyskiwanie ~/.vimrcjako konfiguracja współdzielona.
ryenus

Podczas gdy Neovim ignoruje t_xxopcje, twierdzę, że bardziej właściwe jest zawinięcie czegoś takiego if !has('nvim'), na przykład w tym przykładzie . Może je teraz zignorować, ale co, jeśli to się zmieni w przyszłości? Wskazuje również domyślnie, że opcja dotyczy tylko Vima.
ZeroKnight,

5

Możesz użyć if has('nvim'). Oto kompletne przykłady:

Konfiguracja tylko dla Neovim:

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

Konfiguracja tylko dla Vima

if !has('nvim')
    set ttymouse=xterm2
endif

1

Sposób tu próbuje podlinkowujemy ~/.config/nvimsię ~/.vimi sprawiają, że jest kompatybilny z conf 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

Po tej instalacji ~/.config/nvim/init.vimprawdziwy plik jest używany jako conf. ~/.vim/vimrcjest tylko linkiem do tego.

Teraz musimy wprowadzić menedżera wtyczek do vimponownego użycia nvim, wtyczek, zmieniając runtimepathi packpath. W rzeczywistości ścieżki wtyczek są ponownie wykorzystywane automatycznie, następująca poprawka ponownie wykorzystuje menedżera wtyczek.

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

Źródło: Share confs pomiędzy vim i nvim


1

Aby dodać odpowiedź ipatch, która jest poprawną odpowiedzią, jeśli masz nieco inną konfigurację niż Vim, może być konieczne dostosowanie ścieżki.

Na przykład w systemie Windows zamiast domyślnej konfiguracji z:

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

Ja używam:

$HOME
   +--vimfiles
          +--vimrc

(Powodem jest to, że łatwiej jest umieścić jeden katalog pod kontrolą wersji niż plik i katalog, szczególnie gdy plik znajduje się w katalogu głównym katalogu domowego)

Następujące dla mnie działa:

set runtimepath^=~/vimfiles runtimepath+=~/vimfiles/after
let &packpath=&runtimepath
source ~/vimfiles/vimrc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.