On Mon, Mar 9, 2026 at 8:59 PM Yegappan Lakshmanan <[email protected]> wrote: > > Hi, > > On Mon, Mar 9, 2026 at 5:15 PM mattn <[email protected]> wrote: >> >> Today, many text editors and IDEs support the Language Server Protocol >> (LSP). As you all know, LSP is a protocol that provides features such as >> code completion, syntax highlighting, and error detection, supporting a wide >> range of programming languages. >> >> Vim will most likely still be alive ten years from now, and so will LSP. >> There is more than enough merit in adding LSP support to Vim's core >> functionality. >> >> I would like to discuss and decide on Vim's direction now, while we have the >> opportunity. There are broadly two approaches: >> >> Plan 1. Vim core implements the LSP client itself >> Plan 2. Vim core implements the building blocks needed for an LSP client >> >> The first plan needs little explanation. Having Vim core implement the LSP >> client directly is the most straightforward way to provide LSP support. This >> would allow users to take advantage of LSP features simply by using Vim. >> >> The second plan is for Vim core to implement the building blocks needed for >> an LSP client. This means Vim core would provide the foundation for LSP >> client functionality. This would enable plugins such as vim-lsp and >> yegappan/lsp to build fast and stable LSP clients by leveraging core >> functionality. > > > I prefer the second option as that is more flexible and allows more custom > plugins to be developed. > >> >> As far as I know, the following are currently a burden for LSP clients >> implemented as Vim plugins: >> >> Obtaining text diffs >> Applying TextEdits > > > The enhancements to the listener functionality in Vim 9.2 are supposed to > simplify the method to get the > changes. I haven't tried it out yet as I want the LSP plugin to work with Vim > 9.0. > > I also added the diff() function to simplify getting the diff between a > cached version of a buffer and the > latest version. > >> >> When obtaining text diffs in Vim script, you would typically call >> getbufline(1, '$'), but when the text is tens of thousands of lines long, >> this function call becomes costly — for example, applying semantic >> highlights can take several seconds. LSP clients should send only the >> changed portions to the server. >> >> As for applying TextEdits, anyone who has implemented an LSP client will >> understand — applying TextEdits requires accurately and efficiently >> reflecting changes to a buffer based on specified positions and lengths, >> making it a complex and costly operation. >> >> Implementing these in Vim script is extremely difficult, and performance >> issues are likely to arise. If we choose Plan 2, I believe we need to >> implement the following three building blocks in Vim core: >> >> fname_to_uri(), fname_from_uri() >> A way to obtain text diffs using listener_add(), or a getchanges() function >> to get the current text diff >> applytextedits() to apply TextEdits to a buffer >> >> > We also need functions to better handle snippets with multiple variables. >
Another feature we need is support for string identifiers within the Vim channel interface. While the Language Server Protocol specification allows for both numeric and string identifiers in JSON-RPC messages, the Vim channel interface currently only supports numeric ones. Regards, Yegappan -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/CAAW7x7kSpzuZHxsj5--7U64PPPtKHO4XMKAHiy0pkCAw6M5tWQ%40mail.gmail.com.
