Open IndianBoy42 opened 3 years ago
BTW there are some problems in the example configs when run inside a vim.cmd [[ ]]
block.
s:
variables gives me a 'illegal variable names' errorvim.cmd [[
call wilder#set_option('pipeline', [
wilder#branch(
wilder#cmdline_pipeline({
'fuzzy': 1,
}),
wilder#python_search_pipeline({
'pattern': 'fuzzy',
}),
),
])
]]
There's some issues with writing the configuration fully in Lua due to https://github.com/neovim/neovim/issues/13436. I'll explore if writing wrappers in Lua will help avoid this issue.
Regarding the vim.cmd
block,
s:
variables have to be renamed to g:
variables.\
to delimit a line continuation, so the correct config will bevim.cmd [[
call wilder#set_option('pipeline', [
\ wilder#branch(
\ wilder#cmdline_pipeline({
\ 'fuzzy': 1,
\ }),
\ wilder#python_search_pipeline({
\ 'pattern': 'fuzzy',
\ }),
\ ),
\ ])
]]
vim.cmd [[
call wilder#set_option('pipeline', [
\ wilder#branch(
\ wilder#cmdline_pipeline({
\ 'fuzzy': 1,
\ }),
\ wilder#python_search_pipeline({
\ 'pattern': 'fuzzy',
\ }),
\ ),
\ ])
]]
Results in:
packer.nvim: Error running config for wilder.nvim: /home/amedhi/.config/nvim/lua/lv-wilder/init.lua:21: Vim(call):E697: Missing end of List ']':
vim.cmd [[
let g:wilder_highlighters = [ wilder#pcre2_highlighter(), wilder#basic_highlighter(), ]
call wilder#set_option('renderer', wilder#renderer_mux({
\ ':': wilder#popupmenu_renderer({
\ 'highlighter': wilder#basic_highlighter(),
\ }),
\ '/': wilder#wildmenu_renderer({
\ 'highlighter': wilder#basic_highlighter(),
\ }),
\})
)
]]
Results in:
packer.nvim: Error running config for wilder.nvim: /home/amedhi/.config/nvim/lua/lv-wilder/init.lua:34: Vim(call):E116: Invalid arguments for function wilder#renderer_mux
Should I open a new issue about the example configs?
I just tried merging all the lines (so no line continuations are necessary) and I no longer get any error messages
For the first case I can't reproduce it (although I'm not using packer
, just an init.lua
).
For the second case there last )
is missing the leading \
.
A proper way to use lua config would be great! Something like the setup {}
functions that many other plugins use to allow specifying a table of options
I'm working on a workaround for neovim/neovim#13436, which will allow easier configuration in Lua. Will update here when the PR is merged.
I've merged #115 which includes an experimental Lua shim for wilder
. There is no documentation (since it is highly experimental), but the configuration should be straightforward:
For every wilder#<foo>
method, an analogous wilder.<foo>
method is exposed in Lua. Take this example config:
call wilder#setup({'modes': [':', '/', '?']})
call wilder#set_option('use_python_remote_plugin', 0)
call wilder#set_option('pipeline', [
\ wilder#branch(
\ wilder#python_file_finder_pipeline({
\ 'file_command': ['find', '.', '-type', 'f', '-printf', '%P\n'],
\ 'dir_command': ['find', '.', '-type', 'd', '-printf', '%P\n'],
\ 'filters': ['fuzzy_filter', 'difflib_sorter'],
\ }),
\ wilder#cmdline_pipeline(),
\ wilder#python_search_pipeline(),
\ ),
\ ])
The config in Lua would then look like:
local wilder = require('wilder')
wilder.set_option('use_python_remote_plugin', 0)
wilder.setup({modes = {'/', '?', ':'}})
wilder.set_option('pipeline', {
wilder.branch(
wilder.python_file_finder_pipeline({
file_comand = {'find', '.', '-type', 'f', '-printf', '%P\n'},
dir_comand = {'find', '.', '-type', 'd', '-printf', '%P\n'},
filters = {'fuzzy_filter', 'difflib_sorter'},
}),
wilder.cmdline_pipeline(),
wilder.python_search_pipeline()
),
})
Essentially, wilder#set_option()
is translated to wilder.set_option()
and similar for other methods. All arguments remain the same. Lambdas have to be translated accordingly e.g. {ctx, x -> x * 2}
becomes function(ctx, x) return x*2 end
.
Note: only the top level wilder#...
methods are provided, methods in deeper namespaces e.g. wilder#cmdline#parse()
are not provided.
Note: The Lua shim introduces a bit of overhead since Neovim has to do some translation of the arguments passed from VimScript to Lua and vice versa. Ultimately, most of the logic will be passed to the VimScript core so in general a Lua config will always be slower than a VimScript config. (This could be alleviated by providing pure Lua implementations of the VimScript core, but that would be a topic for another day.)
Right now all the configuration is done through vimscript calls and variables. Personally, I want to keep as much of my configuration as lua, but this plugin makes me keep around some large blocks of
vim.cmd[[]]