Fzf-Lsp
Если вы пользуетесь Neovim в Windows, сразу можно готовиться переписывать плагины за другими.
Не успел я объяснить автору nvim-fzf
как работают named pipes в Windows,
чтобы он наконец сделал нормальную поддержку этой ОС, пришлось чинить
fzf-lsp
. Последний использует «стандартный» плагин fzf.vim
, написанный
самим автором fzf
, для показа сообщений из встроенного в Neovim LSP.
Конечно же, написать кроссплатформенно автор не может, у него же нет Windows
(непреодолимое препятствие в наши дни!). Дёргать preview.sh
, который на
моей машине дёргает bash
из дистибутива Git и открывает всплывающее чёрное
окно для fzf preview — вот кроссплатформенность для разработчиков в наши дни.
Вот как это фиксится.
diff --git a/lua/fzf_lsp.lua b/lua/fzf_lsp.lua index 79c0365..09c6fe0 100644 --- a/lua/fzf_lsp.lua +++ b/lua/fzf_lsp.lua @@ -6,7 +6,7 @@ local M = {} local __file = debug.getinfo(1, "S").source:match("@(.*)$") assert(__file ~= nil) local bin_dir = fn.fnamemodify(__file, ":p:h:h") .. "/bin" -local bin = { preview = (bin_dir .. "/preview.sh") } +local bin = { preview = (bin_dir .. '/' .. vim.env.FZF_PREVIEW_COMMAND) } -- }}} -- utility functions {{{ @@ -325,8 +325,8 @@ end local function fzf_locations(bang, prompt, header, source, infile) local preview_cmd = (infile and - (bin.preview .. " " .. fn.expand("%") .. ":{}") or - (bin.preview .. " {}") + ('for /f "delims=: tokens=1" %L in ({}) do @(IF %L GEQ 10 (set /a "pre=%L-10">nul) ELSE (set "pre=0"))&&@cmd /a /q /s /v:on /c "' .. bin.preview .. ' --line-range %pre%: --highlight-line %L ' .. fn.expand("%") .. '"') or + ('for /f "delims=: tokens=1,2" %L in ({}) do @(IF %M GEQ 10 (set /a "pre=%M-10">nul) ELSE (set "pre=0"))&&@cmd /a /q /s /v:on /c "' .. bin.preview .. ' --line-range %pre%: --highlight-line %M %L"') ) local options = { "--prompt", prompt .. ">",
Одной строкой cmd
мы делим строки из диагностики на куски (разделитель:
:
), и берём первый из них (номер строки) для показа диагностики для
текущего буфера, и два (имя файла и номер строки) — для диагностики во всех
буферах сразу (это :Diagnostics
и :DiagnosticsAll
в fzf-lsp
).
Полученное скармливаем в качестве параметров программе предварительного
просмотра, bat
. Выводим диапазон -10 от текущей строки, подсвечиваем
текущую строку.
Я в курсе, что автор ничего не должен никому. Можно даже сказать, что FOSS
расшифровывается как «Fuck Off, [we're writing] Shitty Software». Поэтому
придётся поддерживать собственные форки как для fzf.vim
, так и для
fzf-lsp
.