- π¬π§ English version
- π¨π³ Chinese version
- πͺπΈ Spanish version
- π§π· Portuguese version
- π―π΅ Japanese version
- π·πΊ Russian version
- ΠΠΎΡΠ°ΡΠΎΠΊ
- ΠΡΠ΄ΠΈ ΠΊΠ»Π°ΡΡΠΈ Lua ΡΠ°ΠΉΠ»ΠΈ
- ΠΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ Lua Ρ Vimscript
- ΠΡΠΎΡΡΡΡ ΡΠΌΠ΅Π½ vim
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΡΡ Lua Π² ΡΠΊΠΎΡΡΡ ΠΏΠ΅ΡΡΠΎΠΊΠ»Π°ΡΠ½ΠΎΡ ΠΌΠΎΠ²ΠΈ Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Neovim ΠΏΠ΅ΡΠ΅ΡΠ²ΠΎΡΡΡ ΡΡ Π² ΠΎΠ΄Π½Ρ ΡΠ· Π½Π°ΠΉΠ²Π°ΠΆΠ»ΠΈΠ²ΡΡΠΈΡ ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡΠ΅ΠΉ. Π’ΠΈΠΌ Π½Π΅ ΠΌΠ΅Π½Ρ, ΠΊΡΠ»ΡΠΊΡΡΡΡ ΡΡΠ±ΠΎΠ²ΠΈΡ ΠΌΠ°ΡΠ΅ΡΡΠ°Π»ΡΠ² ΠΏΠΎ ΡΠΎΠ·ΡΠΎΠ±ΡΡ ΠΏΠ»Π°Π³ΡΠ½ΡΠ² Π½Π° Lua Π·Π½Π°ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΠ΅ Π½ΡΠΆ Π°Π½Π°Π»ΠΎΠ³ΡΡΠ½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΡΠ°Π»ΡΠ² Π½Π° Vimscript. Π¦Π΅ΠΉ Π΄ΠΎΠ²ΡΠ΄Π½ΠΈΠΊ ΡΠΏΡΠΎΠ±Π° Π½Π°Π΄Π°ΡΠΈ Π±Π°Π·ΠΎΠ²Ρ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠ°ΡΠΊΡ.
ΠΠΎΠ²ΡΠ΄Π½ΠΈΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΉ Π· ΠΏΡΠΈΠΏΡΡΠ΅Π½Π½ΡΠΌ, ΡΠΎ Π²ΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΠ΅ ΡΠΎ Π½Π°ΠΉΠΌΠ΅Π½Ρ 0.5 Π²Π΅ΡΡΡΡ Neovim.
Π―ΠΊΡΠΎ Π²ΠΈ ΡΠ΅ Π½Π΅ Π·Π½Π°ΠΉΠΎΠΌΡ Π· ΡΡΡΡ ΠΌΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠ²Π°Π½Π½Ρ, Ρ Π²Π΅Π»ΠΈΠΊΠ΅ ΡΡΠ·Π½ΠΎΠΌΠ°Π½ΡΡΡΡ ΡΠ΅ΡΡΡΡΡΠ² ΡΠΎΠ± ΠΏΠΎΡΠ°ΡΠΈ:
- Learn X in Y minutes page about Lua Π½Π°Π΄Π°ΡΡΡ Π²Π°ΠΌ ΡΠ²ΠΈΠ΄ΠΊΠΈΠΉ ΠΎΠ³Π»ΡΠ΄ ΠΎΡΠ½ΠΎΠ²ΠΈ ΠΌΠΎΠ²ΠΈ
- Π¦Π΅ΠΉ Π³Π°ΠΉΠ΄ ΡΠ°ΠΊΠΎΠΆ Π΄ΠΎΠ±ΡΠΈΠΉ ΡΠ΅ΡΡΡΡ Π΄Π»Ρ ΡΠ²ΠΈΠ΄ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΠ°ΡΠΊΡ
- Π―ΠΊΡΠΎ Π²Π°ΠΌ Π±ΡΠ»ΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π°ΡΡΡΡΡ Π²ΡΠ΄Π΅ΠΎ, 1-hour tutorial on the language
- ΠΠΎΡΡΡΠ±Π½ΠΎ Π±ΡΠ»ΡΡΠ΅ ΡΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ²? Π‘ΠΏΡΠΎΠ±ΡΠΉ the LuaScript tutorial
- Lua-users wiki Π²Π΅Π»ΠΈΠΊΠΈΠΉ ΠΎΠ±ΡΡΠ³ ΠΊΠΎΡΠΈΡΠ½ΠΎΡ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΠΎ Lua
- Official reference manual for Lua ΠΌΠΎΠΆΠ΅ Π΄Π°ΡΠΈ ΡΠΎΠ±Ρ Π½Π°ΠΉΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΈΠΉ ΠΎΠ³Π»ΡΠ΄ ΠΌΠΎΠ²ΠΈ (Π Vimdoc ΠΏΠ»Π°Π³ΡΠ½ Π΄Π»Ρ ΡΠΈΡΠ°Π½Π½Ρ Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ Neovim: milisims/nvim-luaref)
Π‘Π»ΡΠ΄ Π·Π°Π·Π½Π°ΡΠΈΡΠΈ ΡΠΎ Lua Π΄ΡΠΆΠ΅ ΠΏΡΠΎΡΡΠ° ΠΌΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠ²Π°Π½Π½Ρ. ΠΡ Π»Π΅Π³ΠΊΠΎ Π²ΡΠΈΡΠΈ, ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎ ΡΠΊΡΠΎ Π²ΠΈ ΠΌΠ°ΡΡΠ΅ Π΄ΠΎΡΠ²ΡΠ΄ Π·Ρ ΡΡ ΠΎΠΆΠΈΠΌΠΈ ΠΌΠΎΠ²Π°ΠΌΠΈ - Π½Π°ΠΏΡΠΈΠΊΠ»Π°Π΄ Javscript. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π½Π°ΡΠΈ Lua Π±ΡΠ»ΡΡΠ΅ Π½ΡΠΆ Π²Π²Π°ΠΆΠ°ΡΡΠ΅!
ΠΠ½ΡΠ΅Π³ΡΠΎΠ²Π°Π½Π° Π²Π΅ΡΡΡΡ Lua Ρ Neovim LuaJIT 2.1.0, ΡΠΎ ΠΏΡΠ΄ΡΡΠΈΠΌΡΡ ΡΡΠΌΡΡΠ½ΡΡΡΡ Π· Lua 5.1.
ΠΠ΅ΠΊΡΠ»ΡΠΊΠ° ΡΡΡΠΎΡΡΠ°Π»ΡΠ² Π²ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΡΠΎΠ± Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΡΠΈ ΡΠΎΠ·ΡΠΎΠ±Π»ΡΠ²Π°ΡΠΈ Lua ΠΏΠ»Π°Π³ΡΠ½ΠΈ Π΄Π»Ρ Neovim. ΠΠ΅ΡΠΊΡ Π· Π½ΠΈΡ ΡΡΠΎΡ ΠΈ Π΄ΠΎΠΏΠΎΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΡΠ΅ΠΉ Π΄ΠΎΠ²ΡΠ΄Π½ΠΈΠΊ. ΠΠ΅Π»ΠΈΠΊΠ° Π²Π΄ΡΡΠ½ΡΡΡΡ Π°Π²ΡΠΎΡΠ°ΠΌ.
- teukka.tech - From init.vim to init.lua
- dev.to - How to write neovim plugins in Lua
- dev.to - How to make UI for neovim plugins in Lua
- ms-jpq - Neovim Async Tutorial
- oroques.dev - Neovim 0.5 features and the switch to init.lua
- Building A Vim Statusline from Scratch - jdhao's blog
- Configuring Neovim using Lua
- Devlog | Everything you need to know to configure neovim using lua
- Vimpeccable - ΠΠΎΠΏΠΎΠΌΡΠΆΠ½ΠΈΠΉ ΠΏΠ»Π°Π³ΡΠ½ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½Ρ
.vimrc
Π½Π° Lua - plenary.nvim - ΠΠ»Π°Π³ΡΠ½, ΡΠΎΠ± Π½Π΅ ΠΏΠΈΡΠ°ΡΠΈ Π²ΡΡ ΡΡΠ½ΠΊΡΡΡ Lua Π΄Π²ΡΡΡ
- popup.nvim - ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΡΡ Popup API Π· vim
- nvim_utils - ΠΠΎΠΏΠΎΠΌΡΠΆΠ½Ρ ΡΡΡΠ»ΡΡΠΈ
- nvim-luadev - REPL/Π΄Π΅Π±Π°Π³ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π΄Π»Ρ ΡΠΎΠ·ΡΠΎΠ±ΠΊΠΈ Lua ΠΏΠ»Π°Π³ΡΠ½ΡΠ²
- nvim-luapad - ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° ΠΏΡΡΠΎΡΠ½ΠΈΡΡ Π΄Π»Ρ Π²Π±ΡΠ΄ΠΎΠ²Π°Π½ΠΎΠ³ΠΎ Lua
- nlua.nvim - Lua ΡΠΎΠ·ΡΠΎΠ±ΠΊΠ° Π΄Π»Ρ Neovim
- BetterLua.vim - ΠΡΠ°ΡΠ΅ ΠΏΡΠ΄ΡΠ²ΡΡΡΠ²Π°Π½Π½Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ Lua Ρ Vim/NeoVim
Neovim ΠΏΡΠ΄ΡΡΠΈΠΌΡΡ Π·Π΄Π°ΡΠ½ΡΡΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΠΊΠΎΠ½ΡΡΠ³ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π° Lua - init.lua
, ΠΎΠΊΡΡΠΌ Π·Π²ΠΈΡΠ½ΠΎΠ³ΠΎ init.vim
init.lua
Π·Π²ΡΡΠ½ΠΎ ΠΎΠΏΡΡΠΎΠ½Π°Π»ΡΠ½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠ³ΡΡΠ°ΡΡΡ. ΠΡΠ΄ΡΡΠΈΠΌΠΊΠ°init.vim
Π½Π΅ Π·Π½ΠΈΠΊΠ»Π°, ΡΠ° ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈΡΡ ΡΠ°Π·ΠΎΠΌ Π· Lua-ΠΊΠΎΠ½ΡΡΠ³ΠΎΠΌ. Π’Π°ΠΊΠΎΠΆ ΠΏΠΎΠΊΠΈ ΡΠΎ Π½Π΅ Π²ΡΡ ΡΡΠ½ΠΊΡΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΏΡΠ΄ΡΡΠΈΠΌΡΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· Lua.
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
Lua ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ½Π° Π·Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ lua/
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ Π² Π²Π°ΡΠΎΠΌΡ 'runtimepath'
(Π΄Π»Ρ Π±ΡΠ»ΡΡΠΎΡΡΡ ΡΠ·Π΅ΡΡΠ² ΡΠ΅ Π±ΡΠ΄Π΅ ~/.config/nvim/lua
Π½Π° *nix ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
ΡΠ° ~/AppData/Local/nvim/lua
Π½Π° Windows. ΠΠ° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΡΠ½ΠΊΡΡΡ require()
Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠΏΠΎΡΡΠΈΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π· ΡΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π³Π»ΡΠ½Π΅ΠΌΠΎ ΡΡΡΡΠΊΡΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΠΉ:
π ~/.config/nvim
βββ π after
βββ π ftplugin
βββ π lua
β βββ π myluamodule.lua
β βββ π other_modules
β βββ π anothermodule.lua
β βββ π init.lua
βββ π pack
βββ π plugin
βββ π syntax
βββ π» init.vim
ΠΠ°ΡΡΡΠΏΠ½ΠΈΠΉ ΠΊΠΎΠ΄ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠΈΡΡ myluamodule.lua
:
require('myluamodule')
ΠΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ Π²ΠΊΠ°Π·ΡΠ²Π°ΡΠΈ ΡΠΎΠ·ΡΠΈΡΠ΅Π½Π½Ρ .lua
.
Π‘Ρ
ΠΎΠΆΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ other_modules/anothermodule.lua
Π²ΠΈΠ³Π»ΡΠ΄Π°Ρ ΡΠ°ΠΊ:
require('other_modules.anothermodule')
Π°Π±ΠΎ
require('other_modules/anothermodule')
Π ΠΎΠ·Π΄ΡΠ»ΠΈΡΠ΅Π»Ρ ΡΠ»ΡΡ
Ρ ΠΌΠΎΠΆΡΡΡ Π±ΡΡΠΈ ΠΊΡΠ°ΠΏΠΊΠΎΡ .
Π°Π±ΠΎ ΡΠ»Π΅ΡΠ΅ΠΌ /
.
Π―ΠΊΡΠΎ Π²ΠΈ Π½Π°ΠΌΠ°Π³Π°ΡΡΠ΅ΡΡ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠΈΡΠΈ Π½Π΅ ΡΡΠ½ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅ ΠΏΡΠΈΠ·Π²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ ΡΠ° Π²ΡΠ΄ΠΌΡΠ½ΠΈ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΡΠΊΡΠΈΠΏΡΠ°.
pcall()
ΡΡΠ½ΠΊΡΡΡ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π° Π΄Π»Ρ Π·Π°ΠΏΠΎΠ±ΡΠ³Π°Π½Π½Ρ ΠΏΠΎΠΌΠΈΠ»ΠΎΠΊ.
local ok, _ = pcall(require, 'module_with_error')
if not ok then
-- Π½Π΅ Π·Π°Π²Π°Π½ΠΆΡΠ²Π°ΡΠΈ
end
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
ΠΠ΅ΡΠΊΡ ΠΏΠ»Π°Π³ΡΠ½ΠΈ ΠΌΠΎΠΆΡΡΡ ΠΌΠ°ΡΠΈ ΠΎΠ΄Π½Π°ΠΊΠΎΠ²Ρ ΡΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΡΠ² Ρ lua/
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ. Π¦Π΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΈΠ·Π²Π΅ΡΡΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ»ΡΠΊΡΡ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠΌΠ΅Π½.
Π―ΠΊΡΠΎ Π΄Π²Π° ΡΡΠ·Π½ΠΈΡ
ΠΏΠ»Π°Π³ΡΠ½ΠΈ ΠΌΠ°ΡΡΡ ΡΠ°ΠΉΠ» lua/main.lua
, Π° ΠΏΠΎΡΡΠΌ Π·Π°Π²Π°Π½ΡΠ°ΠΆΡΡΡΡΡΡ ΡΠ»ΡΡ
ΠΎΠΌ require('main')
, ΡΠΎ ΡΠΊΠΈΠΉ Π· Π½ΠΈΡ
Π±ΡΠ΄Π΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½ΠΈΠΉ?
Π’ΠΎΠΌΡ Π±ΡΠ΄Π΅ Π³Π°ΡΠ½ΠΎΡ ΡΠ΄Π΅ΡΡ ΠΏΠΎΠΊΠ»Π°ΡΡΠΈ ΠΊΠΎΠΆΠ΅Π½ main.lua
ΡΠ°ΠΉΠ» Ρ Π΄ΡΡΠ΅ΠΊΡΠΎΡΡΡ Π· Π½Π°Π·Π²ΠΎΡ ΠΏΠ»Π°Π³ΡΠ½Ρ: lua/plugin_name/main.lua
Π―ΠΊ Ρ Vimscript ΡΠ°ΠΉΠ»ΠΈ, Lua ΡΠ°ΠΉΠ»ΠΈ ΠΌΠΎΠΆΡΡΡ Π±ΡΡΠΈ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Ρ ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ runtimepath
. ΠΠ° Π΄Π°Π½ΠΈΠΉ ΡΠ°Ρ ΠΏΡΠ΄ΡΡΠΈΠΌΡΡΡΡΡΡ Π½Π°ΡΡΡΠΏΠ½Ρ Π½Π°Π·Π²ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΠΉ:
colors/
compiler/
ftplugin/
ftdetect/
indent/
plugin/
syntax/
Π£ ΡΠ°Π½ΡΠ°ΠΉΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ, ΡΡΡ
*.vim
ΡΠ°ΠΉΠ»ΠΈ ΠΌΠ°ΡΡΡ Π±ΡΡΠΈ Π²ΠΈΠ·Π²Π°Π½Ρ ΠΏΡΡΠ»Ρ*.lua
ΡΠ°ΠΉΠ»ΡΠ².
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
ΠΠΎΠΊΠΈ ΡΠ°ΠΉΠ»ΠΈ ΡΠ°Π½ΡΠ°ΠΉΠΌΡ Π½Π΅ Π±Π°Π·ΡΡΡΡΡΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ² Lua, Π΄Π²Π° ΠΏΠ»Π°Π³ΡΠ½ΠΈ ΠΌΠΎΠΆΡΡΡ ΠΌΠ°ΡΠΈ ΡΠ°ΠΉΠ» plugin/main.lua
Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π¦Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΈΠΊΠΎΠ½ΡΡ ΡΠΌΠ°ΡΠΎΠΊ Lua ΠΊΠΎΠ΄Ρ.
:lua require('myluamodule')
ΠΠ° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ heredoc ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Π²ΠΈΠΊΠΎΠ½ΡΠ²Π°ΡΠΈ Π±Π°Π³Π°ΡΠΎΡΡΠ΄ΠΊΠΎΠ²Ρ ΡΠΊΡΡΠΏΡΠΈ:
echo "Here's a bigger chunk of Lua code"
lua << EOF
local mod = require('mymodule')
local tbl = {1, 2, 3}
for k, v in ipairs(tbl) do
mod.method(v)
end
print(tbl)
EOF
ΠΠΎΠΆΠ½Π°
lua
ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠ°Ρ ΡΠ²ΠΎΡ ΠΎΠ±Π»Π°ΡΡΡ Π±Π°ΡΠ΅Π½Π½Ρ ΡΠ° Π·ΠΌΡΠ½Π½Ρ ΠΎΠ³ΠΎΠ»ΠΎΡΠ΅Π½Ρ Π· ΠΊΠ»ΡΡΠΎΠ²ΠΈΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌlocal
Π½Π΅ Π±ΡΠ΄ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π·Π° ΠΌΠ΅ΠΆΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΡΠΈΠΊΠ»Π°Π΄:
:lua local foo = 1
:lua print(foo)
" Π²ΠΈΠ²Π΅Π΄Π΅ 'nil' Π·Π°ΠΌΡΡΡΡ '1'
Lua ΡΡΠ½ΠΊΡΡΡ
print()
ΠΏΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΡ ΠΎΠΆΠ΅ Π΄ΠΎ:echomsg
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΈΡ ΡΠ΄Π½Ρ Π΄Π°Π½Ρ Π±ΡΠ΄ΡΡΡ Π·Π±Π΅ΡΠ΅ΠΆΠ΅Π½Ρ Ρ ΡΡΡΠΎΡΡΡ ΠΏΠΎΠ²ΡΠ΄ΠΎΠΌΠ»Π΅Π½Ρ.
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
Π¦Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΈΠΊΠΎΠ½ΡΡ ΡΠΌΠ°ΡΠΎΠΊ Lua ΠΊΠΎΠ΄Ρ ΡΠΊΠΈΠΉ Π΄ΡΡ Π½Π° Π΄ΡΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΡΠ΄ΠΊΡΠ² Ρ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΌΡ Π±ΡΡΠ΅ΡΡ. Π―ΠΊΡΠΎ ΡΡΠ΄ΠΊΠΈ Π½Π΅ Π·Π°Π·Π½Π°ΡΠ΅Π½Ρ, ΡΠΎ Π΄Π»Ρ ΡΡΠ»ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΡ. ΠΡΠ΄Ρ-ΡΠΊΠΈΠΉ ΡΡΠ΄ΠΎΠΊ ΡΠΊΠΈΠΉ ΠΏΠΎΠ²Π΅ΡΠ½ΡΠ²ΡΡ Π· Π±Π»ΠΎΠΊΡ, Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ Π΄Π»Ρ Π²ΠΈΠ·Π½Π°ΡΠ΅Π½Π½Ρ ΡΠΎΠ³ΠΎ, ΡΠΈΠΌ ΡΠ»ΡΠ΄ Π·Π°ΠΌΡΠ½ΠΈΡΠΈ ΠΊΠΎΠΆΠ΅Π½ ΡΡΠ΄ΠΎΠΊ.
ΠΠ°ΡΡΡΠΏΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΌΡΠ½ΠΈΠ»Π° Π±ΠΈ ΠΊΠΎΠΆΠ΅Π½ ΡΡΠ΄ΠΎΠΊ Ρ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΌΡ Π±ΡΡΠ΅ΡΡ ΡΠ΅ΠΊΡΡΠΎΠΌ hello world
:
:luado return 'hello world'
ΠΠ²Ρ Π½Π΅ΡΠ²Π½Ρ Π·ΠΌΡΠ½Π½Ρ line
ΡΠ° linenr
ΡΠ°ΠΊΠΎΠΆ Π΄ΠΎΡΡΡΠΏΠ½Ρ. line
β ΡΠ΅ ΡΠ΅ΠΊΡΡ ΡΡΠ΄ΠΊΠ°, Π° linenr
β Π½ΠΎΠΌΠ΅Ρ. ΠΠ°ΡΡΡΠΏΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·ΡΠΎΠ±ΠΈΡΡ ΠΊΠΎΠΆΠ΅Π½ ΡΡΠ΄ΠΎΠΊ Ρ Π²Π΅ΡΡ
Π½ΡΠΎΠΌΡ ΡΠ΅Π³ΡΡΡΡΡ, ΡΠΊΡΠΎ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΄ΠΊΠ° Π΄ΡΠ»ΠΈΡΡΡΡ Π½Π° 2 Π±Π΅Π· Π·Π°Π»ΠΈΡΠΊΡ:
:luado if linenr % 2 == 0 then return line:upper() end
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
Neovim Π½Π°Π΄Π°Ρ 3 Ex ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠΎΠ± ΠΏΡΠ΄ΠΊΠ»ΡΡΠΈΡΠΈ Lua ΡΠ°ΠΉΠ»ΠΈ:
:luafile
:source
:runtime
:luafile
ΡΠ° :source
Π΄ΡΠΆΠ΅ ΡΡ
ΠΎΠΆΡ:
:luafile ~/foo/bar/baz/myluafile.lua
:luafile %
:source ~/foo/bar/baz/myluafile.lua
:source %
:source
ΡΠ°ΠΊΠΎΠΆ ΠΏΡΠ΄ΡΡΠΈΠΌΡΡ Π΄ΡΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ, ΠΊΠΎΡΡΡ Π±ΡΠ΄ΡΡΡ ΠΊΠΎΡΠΈΡΠ½Ρ Π΄Π»Ρ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΡΠ°ΡΡΠΈΠ½ΠΈ ΡΠΊΡΠΈΠΏΡΡ:
:1,10source
ΠΠΎΠΌΠ°Π½Π΄Π° runtime
Π΄Π΅ΡΠΎ Π²ΡΠ΄ΡΡΠ·Π½ΡΡΡΡΡΡ: Π²ΠΎΠ½Π° Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡ 'runtimepath'
ΠΎΠΏΡΡΡ Π΄Π»Ρ Π²ΠΈΠ·Π½Π°ΡΠ΅Π½Π½Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ Π·Π²ΡΠ΄ΠΊΠΈ Π±ΡΠ΄ΡΡΡ ΠΏΡΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΡΠ°ΠΉΠ»ΠΈ. ΠΡΠ»ΡΡe Π΄Π΅ΡΠ°Π»Π΅ΠΉ: :help :runtime
.
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
ΠΠΎΠΆΠ»ΠΈΠ²ΠΎ Π²Π°ΠΌ ΡΡΠΊΠ°Π²ΠΎ Ρ ΡΠΎΠΌΡ ΡΡΠ·Π½ΠΈΡΡ ΡΠ° ΡΠΈ Π²Π°ΡΡΠΎ Π²ΡΠ΄Π΄Π°Π²Π°ΡΠΈ ΠΏΠ΅ΡΠ΅Π²Π°Π³Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΏΠΎΡΠΎΠ±Ρ Π½Π°Π΄ ΡΠ½ΡΠΈΠΌ. ΠΠΎΠ½ΠΈ ΠΌΠ°ΡΡΡ ΡΡΠ·Π½Ρ Π²ΠΈΠΏΠ°Π΄ΠΊΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ:
require()
:- Π²Π±ΡΠ΄ΠΎΠ²Π°Π½Π° ΡΡΠ½ΠΊΡΡΡ Lua. ΠΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π²Π°Π³Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠΈ Lua
- ΡΡΠΊΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ
lua/
Ρ Π²Π°ΡΠΎΠΌΡ'runtimepath'
- Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ»ΡΠ΄ΠΊΡΠ²Π°ΡΠΈ Π·Π° ΡΠΈΠΌ ΡΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ»ΠΈ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Ρ ΡΠ° Π·Π°ΠΏΠΎΠ±ΡΠ³Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌΡ ΠΏΠ°ΡΡΠΈΠ½Π³Ρ ΡΠ° Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΡΠΊΡΠΈΠΏΡΠ°. Π―ΠΊΡΠΎ Π²ΠΈ Π·ΠΌΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ Ρ Π²ΠΆΠ΅ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ° ΡΠΏΡΠΎΠ±ΡΡΡΠ΅ Π·Π°Π²Π°Π½ΡΠ°ΠΆΠΈΡΠΈ ΠΉΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π·
require()
ΡΠ΅ ΡΠ°Π·, ΡΠΎ Π·ΠΌΡΠ½ΠΈ Π½Π΅ Π·Π°ΡΡΠΎΡΡΡΡΡΡΡ.
:luafile
,:source
,:runtime
:- Ex ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠ΅ ΠΏΡΠ΄ΡΡΠΈΠΌΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ
- ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΠΈΠΊΠΎΠ½ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅ Π²ΠΈΠΊΠΎΠ½Π°Π½Ρ ΡΠΊΡΠΈΠΏΡΠΈ
:luafile
ΡΠ°:source
ΠΏΡΠΈΠΉΠΌΠ°ΡΡΡ ΡΠ»ΡΡ Π΄ΠΎ ΡΠ°ΠΉΠ»Ρ ΡΠΊ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΈΠΉ ΡΠ°ΠΊ Ρ Π²ΡΠ΄Π½ΠΎΡΠ½ΠΈΠΉ Π΄ΠΎ ΡΠΎΠ±ΠΎΡΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ ΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΊΠ½Π°:runtime
Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡ'runtimepath'
ΠΎΠΏΡΡΡ ΡΠΎΠ± Π·Π½Π°ΠΉΡΠΈ ΡΠ°ΠΉΠ»ΠΈ
Π¦Ρ Π²Π±ΡΠ΄ΠΎΠ²Π°Π½Π° Vimscript ΡΡΠ½ΠΊΡΡΡ Π²ΠΈΠΊΠΎΠ½ΡΡ Lua Π²ΠΈΡΠ°ΠΆΠ΅Π½Π½Ρ ΡΠ° ΠΏΠΎΠ²Π΅ΡΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π’ΠΈΠΏΠΈ Π΄Π°Π½Π½ΠΈΡ Lua Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΡΡΡΡ Ρ Vimscript ΡΠΈΠΏΠΈ (Ρ Π½Π°Π²ΠΏΠ°ΠΊΠΈ).
" You can store the result in a variable
let variable = luaeval('1 + 1')
echo variable
" 2
let concat = luaeval('"Lua".." is ".."awesome"')
echo concat
" 'Lua is awesome'
" List-like tables are converted to Vim lists
let list = luaeval('{1, 2, 3, 4}')
echo list[0]
" 1
echo list[1]
" 2
" Note that unlike Lua tables, Vim lists are 0-indexed
" Dict-like tables are converted to Vim dictionaries
let dict = luaeval('{foo = "bar", baz = "qux"}')
echo dict.foo
" 'bar'
" Same thing for booleans and nil
echo luaeval('true')
" v:true
echo luaeval('nil')
" v:null
" You can create Vimscript aliases for Lua functions
let LuaMathPow = luaeval('math.pow')
echo LuaMathPow(2, 2)
" 4
let LuaModuleFunction = luaeval('require("mymodule").myfunction')
call LuaModuleFunction()
" It is also possible to pass Lua functions as values to Vim functions
lua X = function(k, v) return string.format("%s:%s", k, v) end
luaeval()
ΠΏΡΠΈΠΉΠΌΠ°Ρ ΠΎΠΏΡΡΠΎΠ½Π°Π»ΡΠ½ΠΈΠΉ Π΄ΡΡΠ³ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΊΠΈΠΉ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΠΈ Π΄Π°Π½Ρ Π΄ΠΎ Π²ΠΈΡΠ°ΠΆΠ΅Π½Π½Ρ. ΠΠΎΡΡΠΌ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈΡ
ΡΠ΅ΡΠ΅Π· ΠΌΠ°Π³ΡΡΠ½Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Ρ Π·ΠΌΡΠ½Π½Ρ _A
:
echo luaeval('_A[1] + _A[2]', [1, 1])
" 2
echo luaeval('string.format("Lua is %s", _A)', 'awesome')
" 'Lua is awesome'
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
Π¦Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π° Vim Π·ΠΌΡΠ½Π½Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ Π²Π°ΠΌ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡΠΈ Lua ΡΡΠ½ΠΊΡΡΡ Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠΌΠ΅Π½ (_G
) Π½Π°ΠΏΡΡΠΌΡ Π· Vimscript. Π Π·Π½ΠΎΠ²Ρ ΡΠΈΠΏΠΈ Π΄Π°Π½Π½ΠΈΡ
Vim Π±ΡΠ΄ΡΡΡ ΡΠΊΠΎΠ½Π²Π΅ΡΡΠΎΠ²Π°Π½Ρ Ρ Lua ΡΠΈΠΏΠΈ Ρ Π½Π°Π²ΠΏΠ°ΠΊΠΈ.
call v:lua.print('Hello from Lua!')
" 'Hello from Lua!'
let scream = v:lua.string.rep('A', 10)
echo scream
" 'AAAAAAAAAA'
" How about a nice statusline?
lua << EOF
" How about a nice statusline?
lua << EOF
function _G.statusline()
local filepath = '%f'
local align_section = '%='
local percentage_through_file = '%p%%'
return string.format(
'%s%s%s',
filepath,
align_section,
percentage_through_file
)
end
EOF
set statusline=%!v:lua.statusline()
" Also works in expression mappings
lua << EOF
function _G.check_back_space()
local col = vim.api.nvim_win_get_cursor(0)[2]
return (col == 0 or vim.api.nvim_get_current_line():sub(col, col):match('%s')) and true
end
EOF
inoremap <silent> <expr> <Tab>
\ pumvisible() ? "\<C-N>" :
\ v:lua.check_back_space() ? "\<Tab>" :
\ completion#trigger_completion()
" Call a function from a Lua module by using single quotes and omitting parentheses:
call v:lua.require'module'.foo()
ΠΠΈΠ²ΡΡΡΡΡ ΡΠ°ΠΊΠΎΠΆ:
Π¦Ρ Π·ΠΌΡΠ½Π½Π° ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π° ΡΡΠ»ΡΠΊΠΈ Π΄Π»Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΡ ΡΡΠ½ΠΊΡΡΠΉ. ΠΠ°ΡΡΡΠΏΠ½ΠΈΠΉ ΠΊΠΎΠ΄ Π·Π°Π²ΠΆΠ΄ΠΈ Π±ΡΠ΄Π΅ Π²ΠΈΠΊΠΈΠ΄ΡΠ²Π°ΡΠΈ ΠΏΠΎΠΌΠΈΠ»ΠΊΡ:
" Aliasing functions doesn't work
let LuaPrint = v:lua.print
" Accessing dictionaries doesn't work
echo v:lua.some_global_dict['key']
" Using a function as a value doesn't work
echo map([1, 2, 3], v:lua.global_callback)
ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΡΠΌΠΊΠ½ΡΡΠΈ ΠΏΡΠ΄ΡΠ²ΡΡΠ΅Π½Π½Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ Lua Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ .vim
ΡΠ°ΠΉΠ»ΡΠ². ΠΠΎΠ΄Π°ΠΉΡΠ΅ let g:vimsyn_embed = 'l'
Π΄ΠΎ Π²Π°ΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΡΠ³ΡΡΠ°ΡΡΡ. ΠΡΠ»ΡΡΠ΅ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΠ :help g:vimsyn_embed
.
Neovim ΠΌΠ°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Ρ Π·ΠΌΡΠ½Π½Ρ vim
ΡΠΊΠ° Ρ Π²Ρ
ΡΠ΄Π½ΠΎΡ ΡΠΎΡΠΊΠΎΡ Π΄ΠΎ API Π· Lua ΠΊΠΎΠ΄Ρ. Π¦Π΅ Π½Π°Π΄Π°Ρ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°ΠΌ ΡΠΎΠ·ΡΠΈΡΠ΅Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Ρ Π±ΡΠ±Π»ΡΠΎΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΡΠΉ, Π° ΡΠ°ΠΊΠΎΠΆ ΡΡΠ·Π½ΠΎΠΌΠ°Π½ΡΡΠ½Ρ ΠΏΡΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ΅ΡΠΊΡ Π²Π°ΠΆΠ»ΠΈΠ²Ρ ΡΡΠ½ΠΊΡΡΡ ΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ:
vim.inspect
: ΡΡΠ°Π½ΡΡΠΎΡΠΌΡΡ Lua ΠΎΠ±ΚΌΡΠΊΡΠΈ Π΄ΠΎ Π»ΡΠ΄ΠΈΠ½ΠΎ-Π·ΡΠΎΠ·ΡΠΌΡΠ»ΠΈΠΉ Π²ΠΈΠ³Π»ΡΠ΄Ρ (ΠΊΠΎΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠ½ΡΠΏΠ΅ΠΊΡΡΠ²Π°Π½Π½Ρ Lua ΡΠ°Π±Π»ΠΈΡΡ)vim.regex
: Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠΉΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½Ρ Π²ΠΈΡΠ°ΠΆΠ΅Π½Π½Ρ vim ΡΠ· Luavim.api
: ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΠΈΠΉ Π½Π°Π΄Π°Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ API ΡΡΠ½ΠΊΡΡΠΉ (ΡΠ°ΠΊΠΎΠΆ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ Π²ΡΠ΄Π΄Π°Π»Π΅Π½ΠΈΠΌΠΈ ΠΏΠ»Π°Π³ΡΠ½Π°ΠΌΠΈ)vim.ui
: UI ΡΡΠ½ΠΊΡΡΡvim.loop
: ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΡ Π΄ΠΎ event-loop (Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡ LibUV)vim.lsp
: ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΡ Π²Π±ΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΉ LSP ΠΊΠ»ΡΡΠ½Ρvim.treesitter
: ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΡ Π΄ΠΎ ΡΡΠ½ΠΊΡΡΠΎΠ½Π°Π»Ρ Π±ΡΠ±Π»ΡΠΎΡΠ΅ΠΊΠΈ tree-sitter
Π¦Π΅ΠΉ ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ Ρ Π²ΠΈΡΠ΅ΡΠΏΠ½ΠΈΠΌ. Π―ΠΊΡΠΎ Π²ΠΈ Π±Π°ΠΆΠ°ΡΡΠ΅ Π·Π½Π°ΡΠΈ ΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΠ΅ΡΠ΅Π· vim
Π·ΠΌΡΠ½Π½Ρ, :help lua-stdlib
ΡΠ° :help lua-vim
. ΠΠΎΠ΄Π°ΡΠΊΠΎΠ²ΠΎ, Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ :lua print(vim.inspect(vim))
ΡΠΎΠ± ΠΎΡΡΠΈΠΌΠ°ΡΠΈ ΠΏΠΎΠ²Π½ΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠ². API ΡΡΠ½ΠΊΡΡΡ ΡΠ΅ΠΆ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²Π°Π½Ρ :help api-global
.
ΠΠΈΡΠ°ΡΠΈ print(vim.inspect(x))
ΠΊΠΎΠΆΠ΅Π½ ΡΠ°Π· ΠΊΠΎΠ»ΠΈ ΡΡΠ΅Π±Π° ΠΏΡΠΎΡΠ½ΡΠΏΠ΅ΠΊΡΡΠ²Π°ΡΠΈ Π²ΠΌΡΡΡ ΠΎΠ±ΚΌΡΠΊΡΠ° ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π½ΡΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΠΌ. ΠΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π²Π°ΡΡΠΎ ΠΌΠ°ΡΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Ρ ΠΎΠ±Π³ΠΎΡΡΠΊΡ Π΄Π΅ΡΡ Ρ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΡΠ³ΡΡΠ°ΡΡΡ (Ρ Neovim 0.7.9+, ΡΡ ΡΡΠ½ΠΊΡΡΡ Π²Π±ΡΠ΄ΠΎΠ²Π°Π½Π°, Π±ΡΠ»ΡΡΠ΅ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ :help vim.pretty_print()
):
function _G.put(...)
local objects = {}
for i = 1, select('#', ...) do
local v = select(i, ...)
table.insert(objects, vim.inspect(v))
end
print(table.concat(objects, '\n'))
return ...
end
You can then inspect the contents of an object very quickly in your code or from the command-line: Π’Π΅ΠΏΠ΅Ρ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ½ΡΠΏΠ΅ΠΊΡΡΠ²Π°ΡΠΈ Π²ΠΌΡΡΡ ΠΎΠ±ΚΌΡΠΊΡΡ ΡΠ²ΠΈΠ΄ΠΊΠΎ Ρ Π²Π°ΡΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΡΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΠΉ ΡΡΠ΄ΠΎΠΊ:
put({1, 2, 3})
:lua put(vim.loop)
ΠΠΎΠ΄Π°ΡΠΊΠΎΠ²ΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ :lua
ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎ Π²ΠΈΠ²Π΅ΡΡΠΈ Π²ΠΈΡΠ°ΠΆΠ΅Π½Π½Ρ Π΄ΠΎΠ΄Π°Π²ΡΠΈ Π΄ΠΎ Π½ΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΡΠΊΡ =
(Neovim 0.7+)
:lua =vim.loop