| # YouCompleteMe integration | 
 |  | 
 | [YouCompleteMe](http://ycm-core.github.io/YouCompleteMe/) is a semantic | 
 | code-completion engine. YouCompleteMe works natively with Vim but it can also be | 
 | integrated with other editors through [ycmd](https://github.com/Valloric/ycmd). | 
 |  | 
 | ## Install YouCompleteMe in your editor | 
 |  | 
 | {% dynamic if user.is_googler %} | 
 |  | 
 | ### [Googlers only]  gLinux | 
 |  | 
 | (This applies to anyone compiling on gLinux, even if editing over SSHFS on | 
 | MacOS) See the Google intranet specific instructions [go/ycm](http://go/ycm). | 
 |  | 
 | You'll also need to setup | 
 | `${FUCHSIA_DIR}/scripts/youcompleteme/default_settings.json` as the default | 
 | settings path in your editor, in order to disable the internal `use_clangd` | 
 | flag. If you want to use clangd, you can additionally edit that file to set | 
 | `use_clangd` to 1, and `clang_binary_path` to | 
 | `${FUCHSIA_DIR}/prebuilt/third_party/clang/${HOST_PLATFORM}/bin/clangd`. | 
 | Remember that in that case, you'll need to build a compilation database with | 
 | `fx compdb`. | 
 |  | 
 | {% dynamic else %} | 
 |  | 
 | See the [installation | 
 | guide](https://github.com/Valloric/YouCompleteMe#installation). | 
 |  | 
 | Note: Installing YCM on MacOS with Homebrew is not recommended because of | 
 | library compatibility errors. Use the official installation guide instead. | 
 |  | 
 | {% dynamic endif %} | 
 |  | 
 | ## Generate compilation database | 
 |  | 
 | YouCompleteMe (and other tools like clang-tidy) require a [JSON compilation | 
 | database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) that | 
 | specifies how each file is compiled. This database is normally stored in a file | 
 | called `compile_commands.json`. You can build a compilation database with `fx compdb`, | 
 | or `fx -i compdb` if you want it rebuilt automatically as you edit files. | 
 |  | 
 | If this database is not present, then Vim can be configured to fall back to the configuration | 
 | in [/scripts/youcompleteme/ycm_extra_conf.py](/scripts/youcompleteme/ycm_extra_conf.py). See | 
 | [Vim configuration](vim.md) for how to set this up. | 
 |  | 
 | ## Use it | 
 |  | 
 | YouCompleteMe will use `compile_commands.json` to do code completion and find | 
 | symbol definitions/declarations. See your editor's YouCompleteMe docs for | 
 | details. The editor should pick up `compile_commands.json` file automatically. | 
 |  | 
 | See [Vim setup](vim.md) for instructions on configuring Vim for Fuchsia development. | 
 |  | 
 | ## Other editors (ycmd) | 
 |  | 
 | You'll need to set the ycmd config option `global_ycm_extra_conf` to point to | 
 | `${FUCHSIA_DIR}/scripts/youcompleteme/ycm_extra_conf.py`. | 
 | Note you may need to manually replace `${FUCHSIA_DIR}` with the correct path. | 
 |  | 
 | Alternatively, you can create a `.ycm_extra_conf.py` symbolic link to let YCM | 
 | automatically find the config for any fuchsia repository: | 
 |  | 
 | ```posix-terminal | 
 | ln -s $FUCHSIA_DIR/scripts/youcompleteme/ycm_extra_conf.py $FUCHSIA_DIR/.ycm_extra_conf.py | 
 | ``` | 
 |  |