diff --git a/lua/luadev.lua b/lua/luadev.lua index 478aa9d..a51ea52 100644 --- a/lua/luadev.lua +++ b/lua/luadev.lua @@ -91,8 +91,12 @@ local function dedent(str, leave_indent) return str end -local function exec(str) - local chunk, err = loadstring(str,"g") +local function exec(str,doeval) + local code = str + if doeval then + code = "return \n"..str + end + local chunk, err = loadstring(code,"g") local inlines = splitlines(dedent(str)) if inlines[#inlines] == "" then inlines[#inlines] = nil @@ -110,10 +114,12 @@ local function exec(str) else local oldprint = _G.print _G.print = luadev_print - local st, err2 = pcall(chunk) + local st, res = pcall(chunk) _G.print = oldprint if st == false then - append_buf({err2},"WarningMsg") + append_buf({res},"WarningMsg") + elseif doeval or res ~= nil then + append_buf(require'inspect'(res)) end end end diff --git a/plugin/luadev.vim b/plugin/luadev.vim index 7e9886a..1aaf28b 100644 --- a/plugin/luadev.vim +++ b/plugin/luadev.vim @@ -2,6 +2,8 @@ command! Luadev lua require'luadev'.start() noremap (Luadev-RunLine) lua require'luadev'.exec(vim.api.nvim_get_current_line()) vnoremap (Luadev-Run) :call luaeval("require'luadev'.exec(_A)", get_visual_selection()) +vnoremap (Luadev-Eval) :call luaeval("require'luadev'.exec(_A,true)", get_visual_selection()) +noremap (Luadev-EvalWord) :call luaeval("require'luadev'.exec(_A,true)", get_current_word()) " thanks to @xolox on stackoverflow function! s:get_visual_selection() @@ -18,3 +20,12 @@ function! s:get_visual_selection() return join(lines, "\n")."\n" endfunction +function! s:get_current_word() + let isk_save = &isk + let &isk = '@,48-57,_,192-255,.' + let word = expand("") + let &isk = isk_save + return word +endfunction + +