Как поделиться конфигом между vim и Neovim

23

Я начал использовать neovim и переместил его .vimrcв .config/nvim/init.vimи другие вещи находятся в .local/share/nvim.

Как лучше всего делиться конфигами или даже плагинами между vim и Neovim? Symlinks? Могу ли я изменить каталоги в .vimrc, чтобы использовать только одну символическую ссылку?

После переноса моей конфигурации vim в местоположение по умолчанию в Neovim это работает почти так:

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

Некоторые плагины (использующие vim-plug ) работают неправильно. Я не могу загрузить пользовательские цвета или vim-Airlines.

lumbric
источник
1
Вы можете использовать if has('nvim')только для команд
nvim

Ответы:

37

TL; DR

Вы можете использовать свои существующие ~/.vimrcфайлы и плагины, расположенные в них, ~/.vimбез символической ссылки на файлы.

И это теперь задокументировано в руководстве NeoVim, см. Переход от Vim .


Следующие строки добавят существующие пути и ~/.vimrcфайл в вашу настройку nvim.

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

Для Linux и macOS просто добавьте приведенные выше строки в начало ~/.config/nvim/init.vimили %LOCALAPPDATA%\nvim\init.vimдля Windows.

Кредит идет на это

ура 🍻
Крис

ipatch
источник
8

Имея конфигурацию в расположении Neovim по умолчанию, сделайте следующее:

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

Чтобы исправить цветовую схему, я должен был установить 256-цветный режим терминала , то есть добавить это в свой файл .vimrc (= init.vim), который будет игнорироваться nvim :

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

Чтобы получить vim-авиакомпанию, я добавил следующий фрагмент в .vimrc:

set laststatus=2

Я не совсем понимаю , зачем это нужно только в Vim , а не в Neovim, но я не только один камень на эту вещь.

lumbric
источник
1
Это всегда было необходимо в VIM. Вероятно, nvim устанавливает это по умолчанию, и именно поэтому он там работает.
Кристиан Брабандт
1
@ChristianBrabandt да, конечно , вы в порядке.
lumbric
Я считаю, что люди обычно ~/.vimrcнаходились в домашней папке, как и в предыдущей строке ~/.vim.
Конрад
Лучше следовать другому ответу , чтобы можно было настроить nvim на конкретный конфиг, в то ~/.vimrcже время используя общий конфиг.
Рен
Хотя Neovim игнорирует t_xxпараметры, я бы сказал, что правильнее было бы обернуть что-то подобное if !has('nvim'), например, в этом примере . Он может игнорировать их сейчас, но что, если это изменится в будущем? Это также неявно указывает, что опция относится только к Vim.
ZeroKnight
5

Вы можете использовать if has('nvim'). Вот полные примеры:

Конфигурация только для Neovim:

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

Конфигурация только для Vim

if !has('nvim')
    set ttymouse=xterm2
endif
Марк Стосберг
источник
1

Метод здесь пытается симлинка ~/.config/nvimк ~/.vim, и сделать конф совместим с 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

После этой настройки ~/.config/nvim/init.vimиспользуется ли настоящий файл как conf. ~/.vim/vimrcэто просто ссылка на него.

Теперь нам нужно сделать менеджер плагинов для vimповторного использования nvim, изменив runtimepathи packpath. На самом деле пути плагинов используются повторно автоматически, следующее исправление - использование менеджера плагинов.

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

Источник: разделите конфы между vim и nvim

Simba
источник
1

Просто добавьте к ответу ipatch, который является правильным ответом, если у вас немного отличная от Vim настройка, вам может понадобиться изменить путь.

Например, в Windows, вместо использования конфигурации по умолчанию с:

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

Я использую:

$HOME
   +--vimfiles
          +--vimrc

(Причина в том, что проще поместить один каталог под контроль версий, чем файл и каталог, особенно когда файл находится в корне вашего домашнего каталога)

Следующее работает для меня тогда:

set runtimepath^=~/vimfiles runtimepath+=~/vimfiles/after
let &packpath=&runtimepath
source ~/vimfiles/vimrc
Ксавье Т.
источник