Nvim :help
ページは、このスクリプト によって ソース から tree-sitter-vimdoc パーサーを使用して生成されます。
vim.*
を通じてアクセス可能な他のすべての関数です。 lua-stdlib を参照してください。nil
として渡されます)、常にすべての引数を指定する必要があります。また、Vim API関数は、Lua配列のデフォルトが1始まりである場合でも、0始まりのインデックスを使用できます。:lua print("Hello!")
:lua local foo = 1
:lua print(foo)
" prints "nil" instead of "1"
:lua=
を使用することもできます。これは :lua vim.print(...)
と同等であり、変数またはテーブルの値を簡単に確認できます。:lua =package
:source ~/programs/baz/myluafile.lua
lua << EOF
local tbl = {1, 2, 3}
for k, v in ipairs(tbl) do
print(v)
end
EOF
init.vim
または init.lua
を使用することをサポートしていますが、両方を同時に使用することはできません。これは、設定 ディレクトリに配置する必要があります。これは、通常、Linux、BSD、またはmacOSの場合は ~/.config/nvim
、Windowsの場合は ~/AppData/Local/nvim/
です。 init.vim
でLuaを、init.lua
でVimscriptを使用できます。これについては、以下で説明します。lua/
ディレクトリに配置し、require
でロードできます。(これは、Vimscriptの autoload メカニズムに相当するLuaです。)~/.config/nvim |-- after/ |-- ftplugin/ |-- lua/ | |-- myluamodule.lua | |-- other_modules/ | |-- anothermodule.lua | |-- init.lua |-- plugin/ |-- syntax/ |-- init.vim
myluamodule.lua
をロードします。require("myluamodule")
.lua
拡張子が存在しないことに注意してください。other_modules/anothermodule.lua
のロードは、次のように行います。require('other_modules/anothermodule')
-- or
require('other_modules.anothermodule')
.
は、パス区切り文字 /
と同等です(Windowsでも)。require('other_modules') -- loads other_modules/init.lua
pcall()
を使用して、そのようなエラーをキャッチできます。次の例では、module_with_error
をロードしようとし、これが成功した場合にのみその関数の1つを呼び出し、そうでない場合はエラーメッセージを出力します。local ok, mymod = pcall(require, 'module_with_error')
if not ok then
print("Module had an error")
else
mymod.function()
end
lua/
ディレクトリを検索するだけでなく、最初に使用したときにモジュールをキャッシュします。したがって、require()
を2回目に呼び出すと、スクリプトは _再実行されず_、キャッシュされたファイルが返されます。ファイルを再実行するには、最初に手動でキャッシュから削除する必要があります。package.loaded['myluamodule'] = nil
require('myluamodule') -- read and execute the module again from disk
vim.cmd("colorscheme habamax")
vim.cmd("%s/\\Vfoo/bar/g")
vim.cmd([[
highlight Error guibg=red
highlight link Warning Error
]])
init.lua
にVimscriptコードを含めることができます。vim.cmd.colorscheme("habamax")
vim.cmd.highlight({ "Error", "guibg=red" })
vim.cmd.highlight({ "link", "Warning", "Error" })
print(vim.fn.printf('Hello from %s', 'Lua'))
local reversed_list = vim.fn.reverse({ 'a', 'b', 'c' })
vim.print(reversed_list) -- { "c", "b", "a" }
local function print_stdout(chan_id, data, name)
print(data[1])
end
vim.fn.jobstart('ls', { on_stdout = print_stdout })
#
)はLuaの識別子として有効な文字ではないため、たとえば、autoload 関数は、この構文で呼び出す必要があることに注意してください。vim.fn['my#autoload#function']()
require()
によって検索されるすべてのパスのリストvim.g.some_global_variable = {
key1 = "value",
key2 = 300
}
vim.print(vim.g.some_global_variable)
--> { key1 = "value", key2 = 300 }
vim.b[2].myvar = 1 -- set myvar for buffer number 2
vim.w[1005].myothervar = true -- set myothervar for window ID 1005
vim.g['my#variable'] = 1
vim.g.some_global_variable.key2 = 400
vim.print(vim.g.some_global_variable)
--> { key1 = "value", key2 = 300 }
local temp_table = vim.g.some_global_variable
temp_table.key2 = 400
vim.g.some_global_variable = temp_table
vim.print(vim.g.some_global_variable)
--> { key1 = "value", key2 = 400 }
nil
に設定します。vim.g.myvar = nil
init.lua
では、vim.opt
などを使用することです。set smarttab
set nosmarttab
vim.opt.smarttab = true
vim.opt.smarttab = false
set wildignore=*.o,*.a,__pycache__
set listchars=space:_,tab:>~
set formatoptions=njt
vim.opt.wildignore = { '*.o', '*.a', '__pycache__' }
vim.opt.listchars = { space = '_', tab = '>~' }
vim.opt.formatoptions = { n = true, j = true, t = true }
vim.opt.shortmess:append({ I = true })
vim.opt.wildignore:prepend('*.o')
vim.opt.whichwrap:remove({ 'b', 's' })
print(vim.opt.smarttab)
--> {...} (big table)
print(vim.opt.smarttab:get())
--> false
vim.print(vim.opt.listchars:get())
--> { space = '_', tab = '>~' }
:echo &number
や :let &listchars='space:_,tab:>~'
を介してオプションを取得および設定する方法と同様に、vim.o
などを使用してより直接的な変数のようなアクセスが存在します。vim.o.smarttab = false -- :set nosmarttab
print(vim.o.smarttab)
--> false
vim.o.listchars = 'space:_,tab:>~' -- :set listchars='space:_,tab:>~'
print(vim.o.listchars)
--> 'space:_,tab:>~'
vim.o.isfname = vim.o.isfname .. ',@-@' -- :set isfname+=@-@
print(vim.o.isfname)
--> '@,48-57,/,.,-,_,+,,,#,$,%,~,=,@-@'
vim.bo.shiftwidth = 4 -- :setlocal shiftwidth=4
print(vim.bo.shiftwidth)
--> 4
vim.bo[4].expandtab = true -- sets expandtab to true in buffer 4
vim.wo.number = true -- sets number to true in current window
vim.wo[0].number = true -- same as above
vim.wo[0][0].number = true -- sets number to true in current buffer
-- in current window only
print(vim.wo[0].number) --> true
{mode}
は、マッピングが有効になるモードプレフィックスを含む文字列または文字列のテーブルです。プレフィックスは、:map-modes にリストされているもの、または :map! の場合は「!」、:map の場合は空の文字列です。{lhs}
は、マッピングをトリガーするキーシーケンスを含む文字列です。-- Normal mode mapping for Vim command
vim.keymap.set('n', '<Leader>ex1', '<cmd>echo "Example 1"<cr>')
-- Normal and Command-line mode mapping for Vim command
vim.keymap.set({'n', 'c'}, '<Leader>ex2', '<cmd>echo "Example 2"<cr>')
-- Normal mode mapping for Lua function
vim.keymap.set('n', '<Leader>ex3', vim.treesitter.start)
-- Normal mode mapping for Lua function with arguments
vim.keymap.set('n', '<Leader>ex4', function() print('Example 4') end)
vim.keymap.set('n', '<Leader>pl1', require('plugin').action)
function() end
でラップします。vim.keymap.set('n', '<Leader>pl2', function() require('plugin').action() end)
buffer
: 指定された番号のバッファに対してのみマッピングを設定します。0
または true
は現在のバッファを意味します。-- set mapping for the current buffer
vim.keymap.set('n', '<Leader>pl1', require('plugin').action, { buffer = true })
-- set mapping for the buffer number 4
vim.keymap.set('n', '<Leader>pl1', require('plugin').action, { buffer = 4 })
silent
: true
に設定すると、エラーメッセージなどの出力を抑制します。vim.keymap.set('n', '<Leader>pl1', require('plugin').action, { silent = true })
expr
: true
に設定すると、{rhs}
を実行せず、戻り値を入力として使用します。特別な キーコード は自動的に変換されます。たとえば、次のマッピングはポップアップメニューでのみ <down>
を <c-n>
に置き換えます。vim.keymap.set('c', '<down>', function()
if vim.fn.pumvisible() == 1 then return '<c-n>' end
return '<down>'
end, { expr = true })
desc
: 例えば :map でマッピングを一覧表示する際に表示される文字列です。{rhs}
としての Lua 関数は、それ以外の場合は Lua: <number> <source file>:<line>
としてのみリストされるため、これは便利です。したがって、プラグインは作成するマッピングに対して常にこれを使用する必要があります。vim.keymap.set('n', '<Leader>pl1', require('plugin').action,
{ desc = 'Execute action from plugin' })
remap
: デフォルトでは、すべてのマッピングは非再帰的です(つまり、vim.keymap.set() は :noremap のように動作します)。{rhs}
自体が実行されるべきマッピングである場合は、remap = true
を設定します。vim.keymap.set('n', '<Leader>ex1', '<cmd>echo "Example 1"<cr>')
-- add a shorter mapping
vim.keymap.set('n', 'e', '<Leader>ex1', { remap = true })
remap = false
でも常に展開されます。vim.keymap.set('n', '[%', '<Plug>(MatchitNormalMultiBackward)')
vim.keymap.del('n', '<Leader>ex1')
vim.keymap.del({'n', 'c'}, '<Leader>ex2', {buffer = true})
vim.api.
nvim_get_keymap(): すべてのグローバルマッピングを返します。vim.api.
nvim_buf_get_keymap(): バッファのすべてのマッピングを返します。vim.api.
nvim_create_autocmd() を使用して作成されます。これは 2 つの必須引数を取ります。{event}
: コマンドまたは関数をトリガーするイベントを含む文字列または文字列のテーブル。{opts}
: イベントがトリガーされたときに何が起こるかを制御するキーを持つテーブル。pattern
: autocmd-pattern を含む文字列または文字列のテーブル。 注意: $HOME
や ~
のような環境変数は自動的に展開されません。これには明示的に vim.fn.
expand() を使用する必要があります。command
: Vim コマンドを含む文字列。callback
: Lua 関数。command
と callback
のいずれか 1 つを指定する必要があります。pattern
が省略された場合、デフォルトは pattern = '*'
です。例vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
pattern = {"*.c", "*.h"},
command = "echo 'Entering a C or C++ file'",
})
-- Same autocommand written with a Lua function instead
vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
pattern = {"*.c", "*.h"},
callback = function() print("Entering a C or C++ file") end,
})
-- User event triggered by MyPlugin
vim.api.nvim_create_autocmd("User", {
pattern = "MyPlugin",
callback = function() print("My Plugin Works!") end,
})
buf
: イベントがトリガーされたバッファの番号(<abuf> を参照)file
: イベントがトリガーされたバッファのファイル名(<afile> を参照)data
: 一部のイベントに渡されるその他の関連データを含むテーブルvim.api.nvim_create_autocmd("FileType", {
pattern = "lua",
callback = function(args)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, { buffer = args.buf })
end
})
function() end
でラップする必要があることを意味します。vim.api.nvim_create_autocmd('TextYankPost', {
callback = function() vim.hl.on_yank() end
})
function(args) ... end
と同等です。)buffer
を使用してバッファローカルの自動コマンド(autocmd-buflocal を参照)を作成できます。この場合、pattern
は使用できません。-- set autocommand for current buffer
vim.api.nvim_create_autocmd("CursorHold", {
buffer = 0,
callback = function() print("hold") end,
})
-- set autocommand for buffer number 33
vim.api.nvim_create_autocmd("CursorHold", {
buffer = 33,
callback = function() print("hold") end,
})
desc
を使用して説明を追加できます(そして追加するべきです)。vim.api.nvim_create_autocmd('TextYankPost', {
callback = function() vim.hl.on_yank() end,
desc = "Briefly highlight yanked text"
})
group
キーを使用して自動コマンドをグループ化できます。これは次のセクションで詳しく説明します。vim.api.
nvim_create_augroup() で作成できます。この関数は 2 つの必須引数を取ります。グループの名前を持つ文字列と、グループが既に存在する場合にグループをクリアする必要があるかどうか(つまり、すべてのグループ化された自動コマンドを削除するかどうか)を決定するテーブルです。関数は、グループの内部識別子である数値を返します。グループはこの識別子または名前で指定できます(ただし、グループが最初に作成されている場合のみ)。augroup vimrc
" Remove all vimrc autocommands
autocmd!
au BufNewFile,BufRead *.html set shiftwidth=4
au BufNewFile,BufRead *.html set expandtab
augroup END
local mygroup = vim.api.nvim_create_augroup('vimrc', { clear = true })
vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead' }, {
pattern = '*.html',
group = mygroup,
command = 'set shiftwidth=4',
})
vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead' }, {
pattern = '*.html',
group = 'vimrc', -- equivalent to group=mygroup
command = 'set expandtab',
})
local mygroup = vim.api.nvim_create_augroup('vimrc', { clear = false })
vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead' }, {
pattern = '*.c',
group = mygroup,
command = 'set noexpandtab',
})
vim.api.
nvim_clear_autocmds() を使用して自動コマンドを削除できます。この関数は、削除される自動コマンドを記述するキーのテーブルである単一の必須引数を取ります。-- Delete all BufEnter and InsertLeave autocommands
vim.api.nvim_clear_autocmds({event = {"BufEnter", "InsertLeave"}})
-- Delete all autocommands that uses "*.py" pattern
vim.api.nvim_clear_autocmds({pattern = "*.py"})
-- Delete all autocommands in group "scala"
vim.api.nvim_clear_autocmds({group = "scala"})
-- Delete all ColorScheme autocommands in current buffer
vim.api.nvim_clear_autocmds({event = "ColorScheme", buffer = 0 })
group
キーが指定されている場合にのみ削除されます。desc
(コマンドを記述する文字列)、force
(false
に設定して、同じ名前の既存のコマンドの置き換えを回避します)、および preview
(:command-preview に使用される Lua 関数)を含めることができます。vim.api.nvim_create_user_command('Test', 'echo "It works!"', {})
vim.cmd.Test()
--> It works!
name
: コマンド名を含む文字列fargs
: 空白で分割されたコマンド引数を含むテーブル(<f-args> を参照)line1
: コマンド範囲の開始行番号(<line1> を参照)line2
: コマンド範囲の最終行番号(<line2> を参照)range
: コマンド範囲の項目数: 0、1、または 2(<range> を参照)count
: 指定されたカウント(<count> を参照)smods
: コマンド修飾子を含むテーブル(<mods> を参照)vim.api.nvim_create_user_command('Upper',
function(opts)
print(string.upper(opts.fargs[1]))
end,
{ nargs = 1 })
vim.cmd.Upper('foo')
--> FOO
complete
属性は、:command-complete にリストされている属性に加えて、Lua 関数を取ることができます。vim.api.nvim_create_user_command('Upper',
function(opts)
print(string.upper(opts.fargs[1]))
end,
{ nargs = 1,
complete = function(ArgLead, CmdLine, CursorPos)
-- return completion candidates as a list-like table
return { "foo", "bar", "baz" }
end,
})
vim.api.
nvim_buf_create_user_command() で作成されます。ここで、最初の引数はバッファ番号(0
は現在のバッファ)です。残りの引数は nvim_create_user_command() と同じです。vim.api.nvim_buf_create_user_command(0, 'Upper',
function(opts)
print(string.upper(opts.fargs[1]))
end,
{ nargs = 1 })
vim.api.
nvim_del_user_command() で削除できます。唯一の引数はコマンドの名前です。vim.api.nvim_del_user_command('Upper')
vim.api.
nvim_buf_del_user_command() を使用します。最初の引数はバッファ番号(0
は現在のバッファ)、2 番目はコマンド名です。vim.api.nvim_buf_del_user_command(4, 'Upper')