Search code examples
pythonvim

Running Python code in Vim


I am writing Python code using Vim, and every time I want to run my code, I type this inside Vim:

:w !python

This gets frustrating, so I was looking for a quicker method to run Python code inside Vim. Executing Python scripts from a terminal maybe? I am using Linux.


Solution

  • How about adding an autocmd to your ~/.vimrc-file, creating a mapping:

    autocmd FileType python map <buffer> <F9> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
    autocmd FileType python imap <buffer> <F9> <esc>:w<CR>:exec '!python3' shellescape(@%, 1)<CR>
    

    then you could press <F9> to execute the current buffer with python

    Explanation:

    • autocmd: command that Vim will execute automatically on {event} (here: if you open a python file)
    • [i]map: creates a keyboard shortcut to <F9> in insert/normal mode
    • <buffer>: If multiple buffers/files are open: just use the active one
    • <esc>: leaving insert mode
    • :w<CR>: saves your file
    • !: runs the following command in your shell (try :!ls)
    • %: is replaced by the filename of your active buffer. But since it can contain things like whitespace and other "bad" stuff it is better practise not to write :python %, but use:
    • shellescape: escape the special characters. The 1 means with a backslash

    TL;DR: The first line will work in normal mode and once you press <F9> it first saves your file and then run the file with python. The second does the same thing, but leaves insert mode first