プロバイダ

Nvim :help ページは、ソースからtree-sitter-vimdocパーサーを使用して生成されています。


プロバイダ
Nvim は一部の機能を動的な「プロバイダ」に委任します。このドキュメントでは、プロバイダとそのインストール方法について説明します。 E319
不足しているプロバイダを必要とする機能を使用するとエラーになります
E319: No "foo" provider found. Run ":checkhealth provider"
:checkhealth コマンドを実行し、以下のセクションを確認してください。

Python 統合 provider-python

Nvim は Python リモートプラグインと、Vim のレガシー python3 および pythonx インターフェース(リモートプラグインとして実装されています)をサポートしています。
注意: Vim 7.3 レガシーインターフェースのみがサポートされており、python-bindeval (Vim 7.4) などの後の機能はサポートされていません。代わりに Nvim API を使用してください。 Python 2 はサポートされていません。
PYTHON クイックスタート
Python プラグインを使用するには、「pynvim」モジュールが必要です。 :checkhealth を実行して、既にインストールされているかどうかを確認してください(一部のパッケージマネージャーは Nvim 本体と一緒にモジュールをインストールします)。
Python 3 プラグインの場合: 1. Python 3.4+ が $PATH にあることを確認してください。 2. モジュールをインストールします( "python3" がない場合は "python" を試してください)
python3 -m pip install --user --upgrade pynvim
pip の --upgrade フラグは、以前のバージョンが既にインストールされている場合でも、最新バージョンを取得することを保証します。
python-virtualenv も参照してください。
注意: 古い "neovim" モジュールは "pynvim" に名前が変更されました。 https://github.com/neovim/neovim/wiki/Following-HEAD#20181118 問題が発生した場合は、_両方_をアンインストールしてから "pynvim" を再インストールしてください
python -m pip uninstall neovim pynvim
python -m pip install --user --upgrade pynvim
PYTHON プロバイダの設定
g:python3_host_prog
Python 3 を起動するコマンド(ディレクトリではなく実行可能ファイル)。これを設定すると起動が速くなります。 virtualenvs での作業に役立ちます。 has("python3") のチェックの前に設定する必要があります。
let g:python3_host_prog = '/path/to/python3'
g:loaded_python3_provider
Python 3 のサポートを無効にするには
let g:loaded_python3_provider = 0
PYTHON VIRTUALENVS
python-virtualenv
プロジェクトごとの virtualenv を頻繁に使用する予定がある場合は、Nvim 用に 1 つの virtualenv を割り当て、g:python3_host_prog を介してインタプリタのパスをハードコードして、各 virtualenv で "pynvim" パッケージが必要にならないようにする必要があります。
pyenv を使用した例
pyenv install 3.4.4
pyenv virtualenv 3.4.4 py3nvim
pyenv activate py3nvim
python3 -m pip install pynvim
pyenv which python  # Note the path
最後のコマンドはインタプリタのパスを報告します。init.vim に追加してください
let g:python3_host_prog = '/path/to/py3nvim/bin/python'
参照: https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim

Ruby 統合 provider-ruby

Nvim は Ruby リモートプラグインと Vim のレガシー ruby-vim インターフェース(Nvim リモートプラグインとして実装されています)をサポートしています。
RUBY クイックスタート
Ruby プラグインを Nvim で使用するには、最新の "neovim" RubyGem をインストールしてください
gem install neovim
:checkhealth を実行して、システムが最新の状態であることを確認してください。
RUBY プロバイダの設定
g:loaded_ruby_provider
Ruby のサポートを無効にするには
let g:loaded_ruby_provider = 0
g:ruby_host_prog
Ruby ホストを起動するコマンド。デフォルトでは "neovim-ruby-host" です。プロジェクトローカルの Ruby バージョン(RVM や rbenv などのツールを使用)では、これを設定することで、すべてのプロジェクトに "neovim" gem をインストールする必要がなくなります。
絶対パス(例:rbenv インストール)を使用するには
let g:ruby_host_prog = '~/.rbenv/versions/2.4.1/bin/neovim-ruby-host'
RVM の "system" Ruby インストールを使用するには
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'

Perl 統合 provider-perl

Nvim は Unix プラットフォームで Perl リモートプラグインをサポートしています。MS-Windows での STDIN のポーリングのサポートは、現在、既知のすべてのイベントループ実装で不足しています。 Vim のレガシー perl-vim インターフェースもサポートされています(これは Nvim リモートプラグインとして実装されています)。 https://github.com/jacquesg/p5-Neovim-Ext
注意: 5.22 以降の perl バージョンのみがサポートされています。
PERL クイックスタート
perl リモートプラグインを Nvim で使用するには、 "Neovim::Ext" cpan パッケージをインストールしてください
cpanm -n Neovim::Ext
:checkhealth を実行して、システムが最新の状態であることを確認してください。
PERL プロバイダの設定
g:loaded_perl_provider
Perl のサポートを無効にするには
:let g:loaded_perl_provider = 0
g:perl_host_prog
Perl 実行可能ファイルを起動するコマンド。 has("perl") のチェックの前に設定する必要があります。
let g:perl_host_prog = '/path/to/perl'

Node.js 統合 provider-nodejs

Nvim は Node.js リモートプラグインをサポートしています。 https://github.com/neovim/node-client/
NODEJS クイックスタート
javascript リモートプラグインを Nvim で使用するには、 "neovim" npm パッケージをインストールしてください
npm install -g neovim
:checkhealth を実行して、システムが最新の状態であることを確認してください。
NODEJS プロバイダの設定
g:loaded_node_provider
Node.js のサポートを無効にするには
:let g:loaded_node_provider = 0
g:node_host_prog
Node.js ホストを起動するコマンド。これを設定すると起動が速くなります。
デフォルトでは、Nvim は "npm root -g" を使用して "neovim-node-host" を検索しますが、これは遅い場合があります。これを回避するには、g:node_host_prog をホストパスに設定します
let g:node_host_prog = '/usr/local/bin/neovim-node-host'

クリップボード統合 provider-clipboard クリップボード

Nvim はシステムクリップボードに直接接続していません。代わりに、シェルコマンドを透過的に使用してシステムクリップボードまたはその他のクリップボード「バックエンド」と通信するプロバイダに依存します。
( "+" および/または "*" レジスタと明示的に対話する代わりに)すべての操作で常にクリップボードを使用するには
set clipboard+=unnamedplus
詳細とオプションについては、'clipboard' を参照してください。
クリップボードツール
動作するクリップボードツールの存在は、暗黙的に '+' および "*" レジスタを有効にします。 Nvim は、これらのクリップボードツールを優先順位で検索します
g:clipboard (設定されていないか false の場合を除く)
pbcopy、pbpaste (macOS)
wl-copy、wl-paste ($WAYLAND_DISPLAY が設定されている場合)
waycopy、waypaste ($WAYLAND_DISPLAY が設定されている場合)
xsel ($DISPLAY が設定されている場合)
xclip ($DISPLAY が設定されている場合)
レモネード (SSH 用) https://github.com/pocke/lemonade
win32yank (Windows)
termux (termux-clipboard-set、termux-clipboard-set 経由)
tmux ($TMUX が設定されている場合)
g:clipboard
カスタムクリップボードツールを設定するには、g:clipboard を辞書に設定します。たとえば、この設定は tmux クリップボードを統合します
let g:clipboard = {
      \   'name': 'myClipboard',
      \   'copy': {
      \      '+': ['tmux', 'load-buffer', '-'],
      \      '*': ['tmux', 'load-buffer', '-'],
      \    },
      \   'paste': {
      \      '+': ['tmux', 'save-buffer', '-'],
      \      '*': ['tmux', 'save-buffer', '-'],
      \   },
      \   'cache_enabled': 1,
      \ }
"cache_enabled" が TRUE の場合、選択がコピーされると、Nvim はコピーコマンドプロセスが終了するまで選択をキャッシュします。貼り付けるときに、コピー処理が終了していない場合、キャッシュされた選択が適用されます。
g:clipboard は、文字列の代わりに関数(lambda を参照)を使用することもできます。たとえば、この設定は g:foo 変数を偽のクリップボードとして使用します
let g:clipboard = {
      \   'name': 'myClipboard',
      \   'copy': {
      \      '+': {lines, regtype -> extend(g:, {'foo': [lines, regtype]}) },
      \      '*': {lines, regtype -> extend(g:, {'foo': [lines, regtype]}) },
      \    },
      \   'paste': {
      \      '+': {-> get(g:, 'foo', [])},
      \      '*': {-> get(g:, 'foo', [])},
      \   },
      \ }
"copy" 関数は、行のリストとレジスタタイプを格納します。 "paste" 関数は、クリップボードを [lines, regtype] リストとして返します。ここで、lines は行のリストであり、regtypesetreg() に準拠したレジスタタイプです。
クリップボード-wsl
Windows WSL の場合は、この g:clipboard 定義を試してください
let g:clipboard = {
            \   'name': 'WslClipboard',
            \   'copy': {
            \      '+': 'clip.exe',
            \      '*': 'clip.exe',
            \    },
            \   'paste': {
            \      '+': 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))',
            \      '*': 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))',
            \   },
            \   'cache_enabled': 0,
            \ }
クリップボード-osc52
Nvim には、OSC 52 を使用してシステムクリップボードにコピーできるクリップボードプロバイダがバンドルされています。 OSC 52 は、コピーされたテキストをターミナルエミュレータに書き込むオペレーティングシステムコマンド制御シーケンスです。ターミナルエミュレータが OSC 52 をサポートしている場合、コピーされたテキストはシステムクリップボードに書き込まれます。
Nvim は、ホストターミナルエミュレータが OSC 52 シーケンスをサポートしているかどうかを自動的に判断し、以下のすべてが真である限り、OSC 52 クリップボードプロバイダを有効にします
Nvim が TUI で実行されている
g:clipboard が設定されていない
'clipboard' が "unnamed" または "unnamedplus" に設定されていない
$SSH_TTY が設定されている
上記のいずれかの条件が満たされていない場合、OSC 52 クリップボードプロバイダはデフォルトでは使用されず、Nvim は通常のプロセスを通じて クリップボードツール の検出にフォールバックします。
Nvim が OSC 52 プロバイダを強制的に使用するには、次の g:clipboard 定義を使用できます
vim.g.clipboard = {
  name = 'OSC 52',
  copy = {
    ['+'] = require('vim.ui.clipboard.osc52').copy('+'),
    ['*'] = require('vim.ui.clipboard.osc52').copy('*'),
  },
  paste = {
    ['+'] = require('vim.ui.clipboard.osc52').paste('+'),
    ['*'] = require('vim.ui.clipboard.osc52').paste('*'),
  },
}
すべてのターミナルエミュレータがシステムクリップボードからの読み取りをサポートしているわけではないことに注意してください(そして、サポートしている場合でも、ユーザーはセキュリティへの影響を認識している必要があります)。そのため、貼り付けに OSC 52 を使用することはできない場合があります(そして、システムの貼り付け関数を使用して 貼り付けることができるため、必要ありません)。ユーザーは、クリップボードからの読み取りを許可するようにターミナルエミュレータを設定する必要がある場合があります。
「貼り付け」は クリップボードとは別の概念です。貼り付けとは「大量のテキストをエディターにダンプする」ことを意味し、クリップボードは quote+ などの機能を提供して OS クリップボードを直接取得および設定します。たとえば、ターミナルでマウスの中ボタンクリックまたは CTRL-SHIFT-v (macOS: CMD-v) は「貼り付け」であり、「クリップボード」ではありません。ターミナルアプリケーション (Nvim) はテキストのストリームを取得するだけで、クリップボードと直接対話しません。
かっこで囲まれた貼り付けモード
TUI での貼り付けは、「かっこで囲まれた貼り付け」ターミナル機能に依存します。これにより、ターミナルアプリケーションはユーザー入力と貼り付けられたテキストを区別できます。 https://cirw.in/blog/bracketed-paste これは、ターミナルがサポートしている場合、自動的に機能します。
ui-貼り付け
GUI は nvim_paste() を呼び出すことで貼り付けることができます。
貼り付けの動作
貼り付けはカーソルの後にテキストを挿入します。行は <NL><CR>、および <CR><NL> で改行されます。大量のテキストを貼り付けると、画面の更新が抑制され、メッセージ領域に "..." パルスが表示されます。
cmdline-mode では、誤って複数のコマンドを実行しないように、最初の行のみが貼り付けられます。複数行を cmdline に貼り付ける場合は、cmdline-window を使用してください。
vim.paste() を再定義することで、カスタム貼り付けハンドラを実装できます。例
vim.paste = (function(lines, phase)
  vim.api.nvim_put(lines, 'c', true, true)
end)

X11 選択メカニズム クリップボード-x11 x11-選択

X11 クリップボードプロバイダは、テキストを「選択」に格納します。選択はアプリケーションによって所有されているため、アプリケーションが閉じられると、選択テキストは失われます。選択の内容は元のアプリケーションによって保持され(コピー時など)、別のアプリケーションが要求した場合(貼り付け時など)にのみ渡されます。
X11 には、PRIMARY、SECONDARY、CLIPBOARD の 3 つの選択範囲が定義されています。CLIPBOARD は、X11 アプリケーションでコピー/貼り付け操作 (CTRL-c/CTRL-v) に一般的に使用されます。一方、PRIMARY は最後に選択されたテキストに使用され、通常はマウスの中ボタンで挿入されます。
Nvim の X11 クリップボードプロバイダーは、"*" レジスタと "+" レジスタにそれぞれ PRIMARY と CLIPBOARD の選択範囲のみを使用します。
メイン
コマンド一覧
クイックリファレンス