Skip to content

Not working with neovim and Nix: Key not present in Dictionary: "oca mlmerlin_path" #1914

Open
@glyh

Description

@glyh

Since NixOS is not a standard setup, I expect this to have rough edges.

What I have:
nvim/after/ftplugin/ocaml.lua

-- Function to get the Merlin share path
local function get_merlin_share_path()
  -- Find the path of `ocamlmerlin` using `vim.fn.exepath()`
  local merlin_exe = vim.fn.exepath "ocamlmerlin"
  if merlin_exe == "" then
    return nil
  end

  -- Get the directory containing `ocamlmerlin`
  local merlin_dir = vim.fn.fnamemodify(merlin_exe, ":h")

  -- Return the share path relative to the executable
  return merlin_dir .. "/../share"
end

-- Get the opam share path
local opamshare = get_merlin_share_path()

-- If the share path is found, append it to the runtime path
if opamshare then
  vim.opt.runtimepath:append(opamshare .. "/merlin/vim")
end

In init.lua

local enable_providers = {
  "python3_provider",
  -- and so on
}

for _, plugin in pairs(enable_providers) do
  vim.g["loaded_" .. plugin] = nil
  vim.cmd("runtime " .. plugin)
end

In checkhealth I'm sure pynvim is present. But I'm still getting this:

E5108: Error executing lua Vim:Error invoking 'python_execute' on channel 3 (python3-script-host):                                      
Traceback (most recent call last):                                                                                                      
  File "<string>", line 1, in <module>                                                                                                  
  File "/nix/store/ldn715jjd4jg4mypi125ha4v8spaklnv-merlin-4.5-414/share/merlin/vim/autoload/merlin.py", line 887, in setup_merlin      
    result = command("check-configuration")                                                                                             
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                             
  File "/nix/store/ldn715jjd4jg4mypi125ha4v8spaklnv-merlin-4.5-414/share/merlin/vim/autoload/merlin.py", line 189, in command           
    return command2(args)                                                                                                               
           ^^^^^^^^^^^^^^                                                                                                               
  File "/nix/store/ldn715jjd4jg4mypi125ha4v8spaklnv-merlin-4.5-414/share/merlin/vim/autoload/merlin.py", line 173, in command2          
    result = json.loads(merlin_exec(cmdline,input=content))                                                                             
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                              
  File "/nix/store/ldn715jjd4jg4mypi125ha4v8spaklnv-merlin-4.5-414/share/merlin/vim/autoload/merlin.py", line 99, in merlin_exec        
    path = vim.eval("merlin#SelectBinary()")                                                                                            
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                            
  File "/nix/store/62cdsp8a4mxqd28fqakfvpfijcacn9sz-python3.11-pynvim-0.4.3/lib/python3.11/site-packages/pynvim/plugin/script_host.py", 
line 205, in eval                                                                                                                       
    obj = self.request("vim_eval", expr)                                                                                                
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                
  File "/nix/store/62cdsp8a4mxqd28fqakfvpfijcacn9sz-python3.11-pynvim-0.4.3/lib/python3.11/site-packages/pynvim/api/nvim.py", line 182, 
in request                                                                                                                              
    res = self._session.request(name, *args, **kwargs)                                                                                  
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                  
  File "/nix/store/62cdsp8a4mxqd28fqakfvpfijcacn9sz-python3.11-pynvim-0.4.3/lib/python3.11/site-packages/pynvim/msgpack_rpc/session.py",
 line 102, in request                                                                                                                   
    raise self.error_wrapper(err)                                                                                                       
pynvim.api.common.NvimError: FileType Autocommands for "*"..function <SNR>1_LoadFTPlugin[20]..script /nix/store/ldn715jjd4jg4mypi125ha4v
8spaklnv-merlin-4.5-414/share/merlin/vim/ftplugin/ocaml.vim[2]..function merlin#Register[147]..merlin#LoadProject[2]..provider#python3#C
all[1]..merlin#LoadProject[2]..merlin#SelectBinary[8]..merlin#FindBinary, line 13: Vim(return):E716: Key not present in Dictionary: "oca
mlmerlin_path"                                                                                                                          
stack traceback:                                                                                                                        
        [C]: at 0x5555556ea469                                                                                                          
        [C]: in function 'nvim_exec_autocmds'                                                                                           
        ...yh/.local/share/nvim/lazy/NvChad/lua/nvchad/autocmds.lua:19: in function <...yh/.local/share/nvim/lazy/NvChad/lua/nvchad/auto
cmds.lua:18> 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions