From: Yegappan Lakshmanan Date: Sun, 20 Dec 2020 19:24:59 +0000 (-0800) Subject: Map characters for insert mode completion X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=52f8049b8d520c0f24103aaf4a0ed9419843267a;p=vim-lsp.git Map characters for insert mode completion --- diff --git a/autoload/lsp.vim b/autoload/lsp.vim index c0c4b68..8f0bb14 100644 --- a/autoload/lsp.vim +++ b/autoload/lsp.vim @@ -24,6 +24,8 @@ def LSP_processInitializeReply(ftype: string, req: dict, reply: dict): # interface 'InitializeResult' var caps: dict = reply.result.capabilities lsp_servers[ftype].caps = caps + + # map characters that trigger signature help if caps->has_key('signatureHelpProvider') var triggers = caps.signatureHelpProvider.triggerCharacters for ch in triggers @@ -31,6 +33,14 @@ def LSP_processInitializeReply(ftype: string, req: dict, reply: dict): endfor endif + # map characters that trigger insert mode completion + if caps->has_key('completionProvider') + var triggers = caps.completionProvider.triggerCharacters + for ch in triggers + exe 'inoremap ' .. ch .. ' ' .. ch .. "" + endfor + endif + # send a "initialized" notification to server LSP_sendInitializedNotif(ftype) enddef @@ -852,6 +862,7 @@ def lsp#addFile(bnum: number, ftype: string): void # add a listener to track changes to this buffer listener_add(function('lsp#bufchange_listener'), bnum) setbufvar(bnum, '&completefunc', 'lsp#completeFunc') + setbufvar(bnum, '&completeopt', 'menuone,preview,noinsert') enddef def lsp#removeFile(fname: string, ftype: string): void @@ -987,6 +998,7 @@ def LSP_getCompletion(): void LSP_sendToServer(ftype, req) enddef +# Insert mode completion handler def lsp#completeFunc(findstart: number, base: string): any var ftype: string = &filetype @@ -1016,8 +1028,11 @@ def lsp#completeFunc(findstart: number, base: string): any endwhile return start else - while lsp_servers[ftype].completePending + var count: number = 0 + while !complete_check() && lsp_servers[ftype].completePending + && count < 15 sleep 2m + count += 1 endwhile var res: list> = [] for item in lsp_servers[ftype].completeItems