Vimと互換性を持つNeovim構成を持つ方法


So you can have your cake and eat it too.


私はすでに約8年間のVimユーザーだった.今回のほとんどはNeovimを使用してコードを書いており、Luaの統合はannouncedのとき、私は可能性に興奮していました.私は自宅で私のVIMの設定を使用しても仕事で.Booking.comでは、リモートマシンでの合理的な量の開発を行います.典型的には、SSHを使ってリモートマシンにアクセスし、そこで作業をします.これらのマシンの多くは、外部パッケージをインストールすることについて全く自由です.しかし、リモートマシンに接続するときには、ドットファイルをコピーすることができます内部システムがあります.
これらの年のほとんどのために、私はvimとneovimの間で私の構成互換性を保った.すべてのVMの設定は、デフォルトではNeoVIMで動作するはずですが、他の方法.私はNeovimが環境で利用できないならば、私がVimで構成を始めることができたように、必要ならば病棟の下で特別なNeovim機能とプラグインを管理しました.Luaのプラグインが関与しているときに、このソリューションはもう動作しません.

要件


これらは設定のために必要です.
  • は、それが私の筋肉記憶を壊さないように、類似した機能でNeovimとVimで働かなければなりません.
  • それは箱から出る単一の構成でなければなりません.そうでなければ、2つの異なる構成デファクトがあります.
  • NeoVimは制限なしでLuaと外部のソフトウェア(例えば、言語サーバやツールのようなツール)を使用することができます.それは私のローカルマシンで実行されます.
  • vimはvimscriptしか使えません.それは彼らがVMScriptで排他的に書かれている限り、プラグインを使用することができますGitで追跡することができます.これは設定ファイルをコピーするだけの制限されたサーバで動作します.
  • 依存関係を最小限に抑えますが、それを高速にしておきます.
  • 解決策



    私のneovim構成ディレクトリはどのように見えますか.
    これは私の(例えば)vimの設定がどのように見えるかです.ディレクトリは$ HOME/にあります.Neovimのデフォルトの場所です.Vimを使う必要がある場合、2つのシンボリックリンクを設定します→ $HOME/.config/nvim$HOME/.vim$HOME/.config/nvim/init.vim

  • INITVim :設定のエントリポイントです.それは両方のために動作するVIMプラグを使用してプラグインをロードします.プラグインがどこに位置するべきであるか、そして、それがNeovimまたはVimであるならば、それによってプラグインをロードするところも定義しました.また、他のすべての設定ファイルを読み込みます.

  • 普通.Vim :バインディング、タブ、ワードラッピングなどのいくつかのような一般的な設定が含まれています.これらのすべての設定は、古典的なvim構成で、両方とも同じです.親指のルールは、両方のために有効ではなく、プラグインはここに行くことです.プラットホームの間に矛盾があるならば、Neovimバージョンは優先します.

  • プラグイン.Vim:共通の補足Vim両方のバージョンで使用されるすべてのプラグインの設定は、例えばNERDTreeeasymotionまたはlightline.vimのように、ここに行きます.

  • オンリムビームVim:自己説明.これらはvimでのみロードされる設定です.それらは、余分な構成やVIM専用プラグインを必要とするプラットフォーム間ではほとんど矛盾しています.ロードされるので、それはNeovimの構成を上書きします.

  • 言語:このディレクトリには、両方のバージョンで使用されるカスタム言語の構成が含まれています.たとえば、ファイル$HOME/.vimrcは、languages/golang.vimファイルを編集するとき、スペースの代わりにタブを使用するためにタブの構成を変えます.

  • Lua : NeoVimのためのすべてのLuaコードを含みます.ここにルアコードを置くネオビムの要件です.NeoVimの設定は一般的なファイルで行われ、優先順位が行われます.これは、このフォルダにはluaプラグインの設定がほとんど含まれることを意味します.すべてのファイルは、具体的なプラグインのコンフィギュレーションです.キッチンシンクとしてのルア.これらのプラグインには、一般的に、言語サーバのバインド、構文ハイライト、オートコンプリートなどを設定するため、重い構成が必要です.コンテンツのほとんどは、異なる言語サーバーの構成です.

  • INITにプラグインをロードする順番.ビーム物質

    私が使用するいくつかのクールなプラグインとその等価性


    これは少しの話題ですが、これは私が使用するプラグインとVIMとNeovimのそれらの等価物の選択です.私の構成のすべてのプラグインの完全なリストのために、あなたはinitをチェックすることができます.VMFILE on Github .あなたは常にNeovimでVIMプラグインを使用することができますが、他の方法ではないことを忘れないでください.

  • gitsigns.nvimvim-gitgutter

  • telescope.nvimctrlp.vim

  • nvim-treesittervim-polyglot

  • indent-blanklinebraceless.vim
  • エクストラトリック


    このスニペットは、プラグインをVimプラグを使用して条件をロードするのに役立ちます.
    " Lazy loading
    " From [https://github.com/junegunn/vim-plug/wiki/faq#conditional](https://github.com/junegunn/vim-plug/wiki/faq#conditional-)-
    " activation                            
    function! Cond(cond, ...)
        let opts = get(a:000, 0, {})     
        return a:cond ? opts : extend(opts, { 'on': [], 'for': [] }) endfunction
    
    これら二つの変数はvimとneovimを区別するために使用できる.技術的には1つしか必要ありませんが、両方を持つことはよりわかりやすいです.また、ベースパスを定義することは、vim-plugが適切な場所でそれらを見つけることができる必要があるのを助けます.
    let is_vim = !has('nvim')
    let is_nvim = has('nvim')
    
    if is_nvim
        let $BASE = stdpath('config')  
    else     
      let $BASE = '$HOME/.vim'                             
    endif
    
    call plug#begin($BASE.'/plugged')
    
    このポストは好きでしたか.私に知らせてください!