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_filetype('nroff', 'rr', 'man -P cat -l %') 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 -o /tmp/a.out % && /tmp/a.out') map_filetype('cpp', 'rr', 'g++ -o /tmp/a.out % && /tmp/a.out')