autoload/lsp/diag.vim | 16 +++++++++++++--- diff --git a/autoload/lsp/diag.vim b/autoload/lsp/diag.vim index c6017a7e77308c45e81455bf276d7dc8213aed9e..b4c72e67cb34f211401eda853dadb2d27e48a54d 100644 --- a/autoload/lsp/diag.vim +++ b/autoload/lsp/diag.vim @@ -250,13 +250,23 @@ d = {row: line('.'), col: col('.')} endif # Display a popup right below the diagnostics position + var msg = diag.message->split("\n") + var msglen = msg->reduce((acc, val) => max([acc, val->strcharlen()]), 0) + var ppopts = {} ppopts.pos = 'topleft' ppopts.line = d.row + 1 - ppopts.col = d.col ppopts.moved = 'any' - ppopts.wrap = false - popup_create(diag.message->split("\n"), ppopts) + + if msglen > &columns + ppopts.wrap = true + ppopts.col = 1 + else + ppopts.wrap = false + ppopts.col = d.col + endif + + popup_create(msg, ppopts) enddef # Display the 'diag' message in a popup or in the status message area