Skip to content
Vim plugin for compiling and uploading arduino sketches
Vim script Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
UltiSnips Add UltiSnips (that just extend c++) May 30, 2018
autoload Code tidy up. Move useprogrammer to global option May 9, 2019
bin Add better mac compatibility Jun 24, 2017
doc Added support for vim-slime for sending commands to tmux/screen/... Feb 20, 2019
ftdetect Fix #7: Don't enable commands on *.pde files Feb 11, 2018
syntax Use a real syntax file Jun 30, 2015
.editorconfig Improved commands run in tmux May 6, 2019
LICENSE Initial commit Jun 30, 2015 Readme update: link tidying up Jul 23, 2019


Vim plugin for compiling, uploading, and debugging arduino sketches. It makes use of the Arduino IDE's commandline interface (new in 1.5.x).


vim-arduino works with Pathogen

cd ~/.vim/bundle/
git clone

and vim-plug

Plug 'stevearc/vim-arduino'

You also need to download the Arduino IDE (version 1.5 or newer) and make sure the arduino command is in your PATH.


The docs have detailed information about configuring vim-arduino here.

The main commands you will want to use are:

  • :ArduinoChooseBoard - Select the type of board from a list.
  • :ArduinoChooseProgrammer - Select the programmer from a list.
  • :ArduinoChoosePort - Select the serial port from a list.
  • :ArduinoVerify - Build the sketch.
  • :ArduinoUpload - Build and upload the sketch.
  • :ArduinoSerial - Connect to the board for debugging over a serial port.
  • :ArduinoUploadAndSerial - Build, upload, and connect for debugging.

To make easy use of these, you may want to bind them to a key combination. You can put the following in .vim/ftplugin/arduino.vim:

nnoremap <buffer> <leader>am :ArduinoVerify<CR>
nnoremap <buffer> <leader>au :ArduinoUpload<CR>
nnoremap <buffer> <leader>ad :ArduinoUploadAndSerial<CR>
nnoremap <buffer> <leader>ab :ArduinoChooseBoard<CR>
nnoremap <buffer> <leader>ap :ArduinoChooseProgrammer<CR>

If you want to add the board type to your status line, it's easy with the following:

" my_file.ino [arduino:avr:uno]
function! MyStatusLine()
  return '%f [' . g:arduino_board . ']'
setl statusline=%!MyStatusLine()

Or if you want something a bit fancier that includes serial port info:

" my_file.ino [arduino:avr:uno] [arduino:usbtinyisp] (/dev/ttyACM0:9600)
function! MyStatusLine()
  let port = arduino#GetPort()
  let line = '%f [' . g:arduino_board . '] [' . g:arduino_programmer . ']'
  if !empty(port)
    let line = line . ' (' . port . ':' . g:arduino_serial_baud . ')'
  return line
setl statusline=%!MyStatusLine()

Note: if you are using the 'airline' plugin for the status line, you can display this custom status part instead of the filename extension with:

autocmd BufNewFile,BufRead *.ino let g:airline_section_x='%{MyStatusLine()}'


Everything is under the MIT License except for the wonderful syntax file, which was created by Johannes Hoff and copied from and is under the Vim License.

You can’t perform that action at this time.