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. 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/CAAW7x7nvge1G_MMauUxrTM6FpyrYUu%3DmY%3DaMS5jN%3DZrSfawwOw%40mail.gmail.com.
