local function map_filetype(filetype, key, cmd) local function format_string() local run_script_string = [[:tabnew %% | :terminal %s :set nocursorline number norelativenumber G]] local cmd_string = string.format(run_script_string, cmd) local map = vim.keymap.set local opts = { noremap = true, silent = true } map('n', key, cmd_string, opts) end vim.api.nvim_create_autocmd("FileType", { pattern = filetype, callback = format_string} ) end -- map_filename('manpage', 'rr', 'man -P cat -l %') -- fix (by filename) map_filetype('*', 'rs', '$(head -1 % | cut -c 3-) %') map_filetype('python', 'rr', 'python3 %') map_filetype('python', 'rt', 'pytest %') map_filetype('go', 'rr', 'go run') map_filetype('rust', 'rr', 'cargo run') map_filetype('c', 'rr', 'gcc % && ./a.out') map_filetype('cpp', 'rr', 'g++ % && ./a.out')