vim.opt.cinoptions = 'l1(0' local cmake_errorformat = table.concat({ -- CMake internal error patterns "CMake Error at %f:%l (%m):", "CMake Error at %f:%l:%m", "CMake Error in %f:%m", "CMake Warning at %f:%l (%m):", -- GCC / Clang (file:line:col: type: message) "%f:%l:%c: %trror: %m", "%f:%l:%c: %twarning: %m", "%f:%l:%c: %tnote: %m", "%f:%l:%c: %m", "%f:%l: %trror: %m", "%f:%l: %twarning: %m", "%f:%l: %m", -- MSVC (file(line): error/warning: message) "%f(%l): %trror %m", "%f(%l): %twarning %m", "%f(%l,%c): %trror %m", "%f(%l,%c): %twarning %m", -- GNU Make directory tracking (resolves relative file paths correctly in quickfix) "%D%*\\a[%*\\d]: Entering directory `%f'", "%X%*\\a[%*\\d]: Leaving directory `%f'", "%D%*\\a: Entering directory `%f'", "%X%*\\a: Leaving directory `%f'", -- Ignore unmatched compiler continuation/garbage lines "%-G%f:%l: %m", "%-G%s" }, ',') local build_options = { cmake_build = { exe = "cmake", args = { "--build", "build" }, errorformat = cmake_errorformat, }, bash_build = { exe = "./build.sh", args = {}, errorformat = cmake_errorformat, } } vim.keymap.set("n", "", function() vim.fn["neomake#Make"](0, { build_options.cmake_build }) end) vim.keymap.set("n", "", function() vim.fn["neomake#Make"](0, { build_options.bash_build }) end)