prabirshrestha / vim-lsp

async language server protocol plugin for vim and neovim
MIT License
3.07k stars 303 forks source link

Remap file paths between LSP server and Vim #1524

Open antekone opened 6 months ago

antekone commented 6 months ago

I'm trying to use clangd installed in a podman container. I've configured it so that running the language server is done by the "podman run" commandline:

au User lsp_setup call lsp#register_server({ 'name': 'clangd', 'cmd': ['/usr/bin/podman', 'run', '-v', getcwd().':'.getcwd(), '--rm', '-i', 'a500dev', 'clangd-17', '--background-index', '--compile-commands-dir='.getcwd(), '--clang-tidy', '--query-driver=/opt/m68k-amigaos/bin/*'], 'allowlist': ['cpp'], })

But the (obvious) problem is that file paths for the system headers is different inside the container and in Vim.

I can mount any container's directory to anywhere on my host, with an exception that most of the time it will not be the same path, so I'm wondering: does vim-lsp support filename remapping from/to what the LSP generates/expects?

For example, some function that would convert a path sent to the LSP, and another function that would convert a path got from LSP? That would probably be enough for me (I think) to use an LSP installed inside podman container.

kmARC commented 1 month ago

Have you tried clangd's --path-mappings?

--path-mappings=<string>

Translates between client paths (as seen by a remote editor) and server paths (where clangd sees files on disk). Comma separated list of '=' pairs, the first entry matching a given path is used. e.g. /home/project/incl=/opt/include,/home/project=/workarea/project