blob: 520c22869127098692c5a8ec193ae94d100d1335 [file] [log] [blame] [view] [edit]
# Helpful Vim tools for Fuchsia development
## Features
The [`fuchsia.vim`](/scripts/vim/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](/docs/development/editors/youcompleteme.md) (YCM)
to provide error checking, code completion, and source navigation within the
Fuchsia tree.
## Installation
The steps are:
1. [Update your login script](#update-your-login-script).
1. [Run the fx set command](#run-the-fx-set-command).
1. [Update your Vim startup file](#update-your-vim-startup-file).
1. [Restart Vim to configure YouCompleteMe](#restart-vim-to-configure-ycm).
1. [Build a compilation database](#build-a-compilation-database).
### Update your login script {#update-your-login-script}
Add the following line to your startup script (typically `~/.bashrc`):
```shell
export FUCHSIA_DIR=<your_fuchsia_source_directory>
```
### Run the fx set command {#run-the-fx-set-command}
This command uses the format `fx set [PRODUCT].[BOARD]`. For example:
```shell
fx set core.x64
```
### Update your Vim startup file {#update-your-vim-startup-file}
If the following line exists in your `~/.vimrc` file, remove it:
```shell
filetype plugin indent on
```
Then add the following lines to your `~/.vimrc`:
```shell
if $FUCHSIA_DIR != ""
source $FUCHSIA_DIR/scripts/vim/fuchsia.vim
endif
filetype plugin indent on
```
### Restart Vim to configure YouCompleteMe {#restart-vim-to-configure-ycm}
Note: If you haven't installed YouCompleteMe, see
[this installation guide](https://github.com/ycm-core/YouCompleteMe#installation){:.external}
to install YCM on your workstation.
To configure YouCompleteMe (YCM), you need to source the
[`fuchsia.vim`](/scripts/vim/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](#update-yout-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.
### Build a compilation database {#build-a-compilation-database}
YCM uses the
[compilation database](https://github.com/ycm-core/YouCompleteMe#option-1-use-a-compilation-database){:.external},
which is more reliable and efficient than the default
[`ycm_extra_config.py` configuration](/docs/development/editors/youcompleteme.md#generate_compilation_database).
To build a compilation database, run the following command:
```shell
fx compdb
```
## Auto-formatting
Google's [vim-codefmt](https://github.com/google/vim-codefmt) can auto-format
code on save. This can be installed using a package manager such as
[Vundle](https://github.com/VundleVim/Vundle.vim) or
[vim-plug](https://github.com/junegunn/vim-plug).
A plugin to format and syntax-highlight GN files is available
[separately](https://gn.googlesource.com/gn/+/refs/heads/master/misc/vim). 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
```