Helpful Vim tools for Fuchsia development

Features

The fuchsia.vim script sets up Vim to do the following:

  • Set paths so that :find and gf know how to find files.
  • Enable FIDL syntax highlighting (using /lib/fidl/tools/vim/).
  • Integrate basic build system so that :make builds and populates the QuickFix window.
  • Configure YouCompleteMe (YCM) to provide error checking, code completion, and source navigation within the Fuchsia tree.

Installation

The steps are:

  1. Update your login script.
  2. Run the fx set command.
  3. Update your Vim startup file.
  4. Restart Vim to configure YouCompleteMe.
  5. Build a compilation database.

Update your login script

Add the following line to your startup script (typically ~/.bashrc):

export FUCHSIA_DIR=<your_fuchsia_source_directory>

Run the fx set command

This command uses the format fx set [PRODUCT].[BOARD]. For example:

fx set core.x64

Update your Vim startup file

If the following line exists in your ~/.vimrc file, remove it:

filetype plugin indent on

Then add the following lines to your ~/.vimrc:

if $FUCHSIA_DIR != ""
  source $FUCHSIA_DIR/scripts/vim/fuchsia.vim
endif
filetype plugin indent on

Restart Vim to configure YouCompleteMe

Note: If you haven't installed YouCompleteMe, see this installation guide{:.external} to install YCM on your workstation.

To configure YouCompleteMe (YCM), you need to source the fuchsia.vim file.

Restart your Vim to run the source $FUCHSIA_DIR/scripts/vim/fuchsia.vim command in your ~/.vimrc file (see Update your Vim startup file).

To verify that your YCM works, place the cursor on an identifier in a .cc or .h file in Vim, then hit Ctrl+] to navigate to the definition of the identifier.

Auto-formatting

Google's vim-codefmt can auto-format code on save. This can be installed using a package manager such as Vundle or vim-plug.

A plugin to format and syntax-highlight GN files is available separately. The following example .vimrc demonstrates how to turn on auto-formatting of GN files using vim-plug and Fuchsia's prebuilt GN:

call plug#begin('~/.vim/plugged')
Plug 'google/vim-maktaba'
Plug 'google/vim-glaive'
Plug 'google/vim-codefmt'
Plug 'https://gn.googlesource.com/gn', { 'rtp': 'misc/vim' }
call plug#end()
call glaive#Install()

" Set gn path to the Fuchsia prebuilt.
let g:gn_path = systemlist('source ' . g:fuchsia_dir . '/tools/devshell/lib/vars.sh && echo $PREBUILT_GN')[0]
execute ':Glaive codefmt gn_executable="' . g:gn_path . '"'

augroup autoformat_gn
  autocmd!
  autocmd FileType gn AutoFormatBuffer gn
augroup END