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.

Raspunde prin e-mail lui