วิธีแชร์ config ระหว่าง vim และ Neovim


23

ผมเริ่มใช้ neovim และย้ายฉัน.vimrcไป.config/nvim/init.vimและสิ่งอื่น ๆ .local/share/nvimที่ตั้งอยู่ใน

วิธีที่ดีที่สุดในการแชร์ configs หรือแม้กระทั่งปลั๊กอินระหว่าง vim และ Neovim คืออะไร symlinks? ฉันสามารถเปลี่ยนไดเรกทอรีใน. vimrc เพื่อใช้ symlink เพียงรายการเดียวได้หรือไม่

หลังจากย้าย vim config ของฉันไปยังตำแหน่งเริ่มต้นของ Neovim สิ่งนี้ดูเหมือนจะทำงานได้เกือบ:

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

ปลั๊กอินบางตัว (โดยใช้vim-plug ) ทำงานได้ไม่ถูกต้อง ฉันไม่สามารถโหลด colorchmes ที่กำหนดเองหรือกลุ่มสายการบินเอง


1
คุณสามารถใช้if has('nvim')สำหรับคำสั่ง nvim เท่านั้น
wizzup

คำตอบ:


37

TL; DR

คุณสามารถใช้~/.vimrcไฟล์และปลั๊กอินที่มีอยู่ภายใน~/.vimโดยไม่ต้องเชื่อมโยงไฟล์

และนี่เป็นเอกสารในขณะนี้ในคู่มือ NeoVim ดูก้าวออกมาจากกลุ่ม


บรรทัดด้านล่างจะเพิ่มเส้นทางและ~/.vimrcไฟล์ที่มีอยู่ในการตั้งค่า nvim ของคุณ

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

สำหรับ Linux และ macOS เพียงเพิ่มบรรทัดด้านบนลงบนสุดของคุณ~/.config/nvim/init.vimหรือ%LOCALAPPDATA%\nvim\init.vimสำหรับ Windows

เครดิตไปที่นี้

ไชโย🍻
คริส


8

มีการกำหนดค่าของคุณในตำแหน่งเริ่มต้นของ Neovim ทำต่อไปนี้:

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

เพื่อแก้ไข colourscheme ฉันต้องตั้ง โหมด 256 terminal colorเช่นเพิ่มในไฟล์. vimrc (= init.vim) ของคุณซึ่งจะถูกละเว้นโดย nvim :

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

ในการรับสายการบินฉันเพิ่มตัวอย่างข้อมูลต่อไปนี้ใน. vimrc:

set laststatus=2

ผมค่อนข้างไม่เข้าใจว่าทำไมนี้เป็นสิ่งจำเป็นเฉพาะในกลุ่มและไม่ได้อยู่ใน Neovim แต่ผมไม่ได้เพียงหนึ่งสะดุดเมื่อสิ่งนี้


1
สิ่งนี้มีความจำเป็นเสมอในกลุ่ม อาจ nvim ตั้งค่านี้เป็นค่าเริ่มต้นและนั่นเป็นสาเหตุที่ทำงานอยู่ที่นั่น
Christian Brabandt

1
@ChristianBrabandt ใช่แน่นอนคุณมีสิทธิ
lumbric

ฉันคิดว่าโดยทั่วไปคนจะได้อยู่ในโฟลเดอร์ที่บ้านเป็นบรรทัดก่อนหน้าชี้ไปที่~/.vimrc ~/.vim
Konrad

ดีกว่าที่จะปฏิบัติตามคำตอบอื่น ๆเพื่อให้สามารถมีการกำหนดค่าเฉพาะ nvim ในขณะเดียวกันการจัดหา~/.vimrcเป็นการกำหนดค่าที่ใช้ร่วมกัน
ryenus

แม้ว่า 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

วิธีการที่นี่พยายามที่จะ symlink ~/.config/nvimไป~/.vimและทำให้ 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

หลังจากการตั้งค่านี้~/.config/nvim/init.vimเป็นไฟล์จริงที่ใช้เป็น conf ~/.vim/vimrcเป็นเพียงลิงค์ไปยังมัน

ตอนนี้เราต้องการที่จะทำให้vimการใช้ซ้ำnvim's ผู้จัดการปลั๊กอินปลั๊กอินโดยการเปลี่ยนและ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

ที่มา: แชร์ confs ระหว่าง vim และ nvim


1

เพียงเพื่อเพิ่มไปยังคำตอบ ipatch ซึ่งเป็นคำตอบที่ถูกต้องหากคุณมีการตั้งค่าที่แตกต่างจาก Vim เล็กน้อยคุณอาจต้องปรับเปลี่ยนเส้นทาง

ตัวอย่างเช่นบน Windows แทนที่จะใช้การกำหนดค่าเริ่มต้นด้วย:

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

ฉันใช้:

$HOME
   +--vimfiles
          +--vimrc

(เหตุผลคือมันง่ายกว่าที่จะวางไดเรกทอรีเดียวภายใต้การควบคุมการแก้ไขมากกว่าไฟล์และไดเรกทอรีโดยเฉพาะอย่างยิ่งเมื่อไฟล์อยู่ที่รากของไดเรกทอรีบ้านของคุณ)

งานต่อไปนี้สำหรับฉันแล้ว:

set runtimepath^=~/vimfiles runtimepath+=~/vimfiles/after
let &packpath=&runtimepath
source ~/vimfiles/vimrc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.