feat: improve quickfixlist window
This commit is contained in:
@@ -1,3 +1,42 @@
|
|||||||
|
vim.fn.sign_define("QfError", { text = "E", texthl = "DiagnosticError" })
|
||||||
|
vim.fn.sign_define("QfWarn", { text = "W", texthl = "DiagnosticWarn" })
|
||||||
|
vim.fn.sign_define("QfInfo", { text = "I", texthl = "DiagnosticInfo" })
|
||||||
|
vim.fn.sign_define("QfNote", { text = "N", texthl = "DiagnosticHint" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
desc = "Add signs to quickfix entries",
|
||||||
|
pattern = "qf",
|
||||||
|
callback = function(event)
|
||||||
|
vim.fn.sign_unplace("quickfix_signs")
|
||||||
|
local qflist = vim.fn.getqflist()
|
||||||
|
require("log").debug(vim.inspect(qflist))
|
||||||
|
for i, item in ipairs(qflist) do
|
||||||
|
if item.valid == 1 then
|
||||||
|
local sign_name = nil
|
||||||
|
if item.type == "E" then
|
||||||
|
sign_name = "QfError"
|
||||||
|
elseif item.type == "W" then
|
||||||
|
sign_name = "QfWarn"
|
||||||
|
elseif item.type == "I" then
|
||||||
|
sign_name = "QfInfo"
|
||||||
|
elseif item.type == "N" then
|
||||||
|
sign_name = "QfNote"
|
||||||
|
end
|
||||||
|
|
||||||
|
if sign_name then
|
||||||
|
vim.fn.sign_place(
|
||||||
|
0,
|
||||||
|
"quickfix_signs",
|
||||||
|
sign_name,
|
||||||
|
event.buf,
|
||||||
|
{ lnum = i }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = "help",
|
pattern = "help",
|
||||||
callback = function()
|
callback = function()
|
||||||
|
|||||||
@@ -146,6 +146,9 @@ vim.keymap.set("n", "<Leader>r", function()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
vim.keymap.set("n", "]c", ":cn<CR>")
|
||||||
|
vim.keymap.set("n", "[c", ":cp<CR>")
|
||||||
|
|
||||||
-- Default bindings that are good to know:
|
-- Default bindings that are good to know:
|
||||||
-- insert mode:
|
-- insert mode:
|
||||||
-- <C-T> - indent, see :h i_CTRL-T
|
-- <C-T> - indent, see :h i_CTRL-T
|
||||||
|
|||||||
+47
-2
@@ -149,5 +149,50 @@ vim.opt.statusline = " %{expand('%:.')}%4( %m%) %{%v:lua._status_line_git()%} %=
|
|||||||
.. " %{&filetype} %-6.6{&fileencoding}"
|
.. " %{&filetype} %-6.6{&fileencoding}"
|
||||||
.. " %-4.4{&fileformat} %4.4(%p%%%)%6.6l:%-3.3v"
|
.. " %-4.4{&fileformat} %4.4(%p%%%)%6.6l:%-3.3v"
|
||||||
|
|
||||||
vim.cmd("syntax on")
|
function _G._quickfix_text_func(info)
|
||||||
vim.cmd("filetype plugin indent on")
|
local items
|
||||||
|
if info.quickfix == 1 then
|
||||||
|
items = vim.fn.getqflist({ id = info.id, items = 1 }).items
|
||||||
|
else
|
||||||
|
items = vim.fn.getloclist(info.winid, { id = info.id, items = 1 }).items
|
||||||
|
end
|
||||||
|
|
||||||
|
local lines = {}
|
||||||
|
for i = info.start_idx, info.end_idx do
|
||||||
|
local item = items[i]
|
||||||
|
local line = ""
|
||||||
|
|
||||||
|
local name = ""
|
||||||
|
if item.bufnr ~= 0 then
|
||||||
|
name = vim.fn.bufname(item.bufnr)
|
||||||
|
end
|
||||||
|
if vim.fn.strchars(name) == 0 then
|
||||||
|
name = " "
|
||||||
|
end
|
||||||
|
line = line .. name
|
||||||
|
|
||||||
|
if item.lnum > 0 then
|
||||||
|
line = line .. ":" .. item.lnum
|
||||||
|
if item.col > 0 then
|
||||||
|
line = line .. ":" .. item.col
|
||||||
|
end
|
||||||
|
line = line .. ": "
|
||||||
|
end
|
||||||
|
|
||||||
|
line = line .. item.text
|
||||||
|
table.insert(lines, line)
|
||||||
|
end
|
||||||
|
|
||||||
|
return lines
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd [[
|
||||||
|
syntax on
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
function! QuickfixTextFunc(info) abort
|
||||||
|
return v:lua._quickfix_text_func(a:info)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
set quickfixtextfunc=QuickfixTextFunc
|
||||||
|
]]
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax clear
|
||||||
|
|
||||||
|
" syntax match qfError "\c\<error\>:\@="
|
||||||
|
" syntax match qfWarn "\c\<warn\(ing\)\?\>:\@="
|
||||||
|
" syntax match qfInfo "\c\<info\>:\@="
|
||||||
|
" syntax match qfNote "\c\<\(note\|hint\)\>:\@="
|
||||||
|
" syntax match qfPassed "\c\<\(ok\|passed\)\>"
|
||||||
|
" syntax match qfFailed "\c\<\fail\(ed\|ure\)\?s\?\>"
|
||||||
|
|
||||||
|
syntax match qfFileName "^[^: ]*" nextgroup=qfLineCol
|
||||||
|
syntax match qfLineCol ":\(\d\+:\)\{,2} " contained
|
||||||
|
|
||||||
|
highlight default link qfFileName Directory
|
||||||
|
highlight default link qfLineCol Delimiter
|
||||||
|
highlight default link qfError DiagnosticError
|
||||||
|
highlight default link qfWarn DiagnosticWarn
|
||||||
|
highlight default link qfInfo DiagnosticInfo
|
||||||
|
highlight default link qfNote DiagnosticHint
|
||||||
|
highlight default link qfPassed DiagnosticOk
|
||||||
|
highlight default link qfFailed DiagnosticError
|
||||||
|
|
||||||
|
highlight clear QuickFixLine
|
||||||
|
highlight QuickFixLine gui=underline
|
||||||
|
|
||||||
|
let b:current_syntax = "qf"
|
||||||
Reference in New Issue
Block a user