let b:ale_fixers = ['clangtidy', 'clang-format', 'remove_trailing_lines', 'trim_whitespace'] let b:ale_linters = ['cc', 'ccls', 'clangcheck', 'clangd', 'clangtidy', 'clazy', 'cppcheck', 'cpplint', 'cquery', 'cspell', 'flawfinder'] " Function to find the project root function! FindProjectRoot() let l:current_dir = expand('%:p:h') while l:current_dir != "/" if filereadable(l:current_dir . "/main.cpp") return l:current_dir endif let l:current_dir = fnamemodify(l:current_dir, ':h') endwhile return "" endfunction " Function to compile the project function! CompileProject(debug) let l:project_root = FindProjectRoot() if l:project_root == "" echo "main.cpp not found in any parent directory." return endif let l:main_file = l:project_root . "/main.cpp" " Extract the project directory name let l:project_name = fnamemodify(l:project_root, ':t') let l:output_file = l:project_root . "/" . l:project_name let l:warning_flags = "-Wall -Weffc++ -Wextra -Wconversion -Wsign-conversion" let l:disable_extension_flags = "-pedantic-errors" let l:debug_flags = a:debug ? "-ggdb" : "-O2 -DNDEBUG" let l:standard_flag = "-std=c++20" let l:compile_cmd = \ "g++" . " " . \ l:standard_flag . " " . \ l:warning_flags . " " . \ l:disable_extension_flags . " " . \ l:debug_flags . " " . \ l:main_file . " " . \ "-o" . " " . l:output_file " Run the compile command and capture the output let l:output = system(l:compile_cmd) " Check if the compilation was successful if v:shell_error echo "Compilation failed:" echo l:output else echo "Compilation successful. Output: " . l:output_file endif endfunction " Function to run the compiled project function! RunProject() let l:project_root = FindProjectRoot() if l:project_root == "" echo "Project root not found." return endif " Extract the project directory name let l:project_name = fnamemodify(l:project_root, ':t') let l:output_file = l:project_root . "/" . l:project_name " Check if the output file exists if !filereadable(l:output_file) echo "Output file not found. Please compile the project first." return endif " Run the compiled output file let l:run_cmd = "!" . l:output_file execute l:run_cmd endfunction " Create the Compile command command! -nargs=0 Compile call CompileProject(1) command! -nargs=0 CompileRelease call CompileProject(0) " Create the Run command command! Run call RunProject()