mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-28 02:21:57 +00:00
add screencast to languageclient-neovim
parent
69a3c1ea3b
commit
0931de3b3a
@ -2,28 +2,13 @@
|
|||||||
2. Install [LanguageClient-neovim](https://github.com/autozimu/LanguageClient-neovim)
|
2. Install [LanguageClient-neovim](https://github.com/autozimu/LanguageClient-neovim)
|
||||||
You may use the plugin manager [vim-plug](https://github.com/junegunn/vim-plug#unix-1)
|
You may use the plugin manager [vim-plug](https://github.com/junegunn/vim-plug#unix-1)
|
||||||
|
|
||||||
### /home/YOUR_USERNAME/.config/nvim/init.vim
|
LanguageClient-neovim
|
||||||
```vim
|
|
||||||
" LanguageClient-neovim
|
|
||||||
call plug#begin('~/.local/share/nvim/plugged')
|
|
||||||
Plug 'autozimu/LanguageClient-neovim', {
|
|
||||||
\ 'branch': 'next',
|
|
||||||
\ 'do': 'bash install.sh',
|
|
||||||
\ }
|
|
||||||
|
|
||||||
" Multi-entry selection UI. FZF
|
|
||||||
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
|
|
||||||
Plug 'junegunn/fzf.vim'
|
|
||||||
|
|
||||||
call plug#end()
|
|
||||||
```
|
|
||||||
|
|
||||||
### bash
|
|
||||||
```bash
|
```bash
|
||||||
nvim +PlugInstall +UpdateRemotePlugins +qa
|
nvim +PlugInstall +UpdateRemotePlugins +qa
|
||||||
```
|
```
|
||||||
|
|
||||||
`~/.config/nvim/settings.json`
|
`~/.config/nvim/settings.json` (optional, by default it creates cache directory `.ccls-cache` in the project root)
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"initializationOptions": {
|
"initializationOptions": {
|
||||||
@ -35,40 +20,47 @@ nvim +PlugInstall +UpdateRemotePlugins +qa
|
|||||||
`~/.config/nvim/init.vim`
|
`~/.config/nvim/init.vim`
|
||||||
```vim
|
```vim
|
||||||
let g:LanguageClient_serverCommands = {
|
let g:LanguageClient_serverCommands = {
|
||||||
\ 'cpp': ['ccls', '--log-file=/tmp/cq.log'],
|
\ 'cpp': ['ccls', '--log-file=/tmp/cc.log'],
|
||||||
\ 'c': ['ccls', '--log-file=/tmp/cq.log'],
|
\ 'c': ['ccls', '--log-file=/tmp/cc.log'],
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
let g:LanguageClient_loadSettings = 1 " Use an absolute configuration path if you want system-wide settings
|
let g:LanguageClient_loadSettings = 1 " Use an absolute configuration path if you want system-wide settings
|
||||||
let g:LanguageClient_settingsPath = '/home/YOUR_USERNAME/.config/nvim/settings.json'
|
let g:LanguageClient_settingsPath = '/home/YOUR_USERNAME/.config/nvim/settings.json'
|
||||||
set completefunc=LanguageClient#complete
|
|
||||||
set formatexpr=LanguageClient_textDocument_rangeFormatting()
|
|
||||||
|
|
||||||
nnoremap <silent> gh :call LanguageClient_textDocument_hover()<CR>
|
|
||||||
nnoremap <silent> gd :call LanguageClient_textDocument_definition()<CR>
|
|
||||||
nnoremap <silent> gr :call LanguageClient_textDocument_references()<CR>
|
|
||||||
nnoremap <silent> gs :call LanguageClient_textDocument_documentSymbol()<CR>
|
|
||||||
nnoremap <silent> <F2> :call LanguageClient_textDocument_rename()<CR>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### In your Project Directory NEED compile_commands.json
|
Make sure you have `.ccls` or [[compile_commands.json]] in your project root. Open a file in the project, run `:LanguageClientStart`.
|
||||||
|
|
||||||
[[compile_commands.json]]
|
These features will work out-of-the-box.
|
||||||
|
|
||||||
```bash
|
```vim
|
||||||
bear make #If you like Makefile
|
nn <silent> <M-j> :call LanguageClient#textDocument_definition()<cr>
|
||||||
|
nn <silent> <C-,> :call LanguageClient#textDocument_references({'includeDeclaration': v:false})<cr>
|
||||||
|
nn <silent> K :call LanguageClient#textDocument_hover()<cr>
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
### `textDocument/documentHighlight`
|
||||||
|
|
||||||
```bash
|
```vim
|
||||||
bear gcc x.c -o x
|
augroup LanguageClient_config
|
||||||
|
au!
|
||||||
|
au BufEnter * let b:Plugin_LanguageClient_started = 0
|
||||||
|
au User LanguageClientStarted setl signcolumn=yes
|
||||||
|
au User LanguageClientStarted let b:Plugin_LanguageClient_started = 1
|
||||||
|
au User LanguageClientStopped setl signcolumn=auto
|
||||||
|
au User LanguageClientStopped let b:Plugin_LanguageClient_stopped = 0
|
||||||
|
au CursorMoved * if b:Plugin_LanguageClient_started | sil call LanguageClient#textDocument_documentHighlight() | endif
|
||||||
|
augroup END
|
||||||
```
|
```
|
||||||
|
|
||||||
or any other
|
|
||||||
|
|
||||||
### `$ccls/navigate`
|
### `$ccls/navigate`
|
||||||
|
|
||||||
|
Semantic navigation. Roughly,
|
||||||
|
|
||||||
|
"D" => first child declaration
|
||||||
|
"L" => previous declaration
|
||||||
|
"R" => next declaration
|
||||||
|
"U" => parent declaration
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
nn <silent> xh :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'L'})<cr>
|
nn <silent> xh :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'L'})<cr>
|
||||||
nn <silent> xj :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'D'})<cr>
|
nn <silent> xj :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'D'})<cr>
|
||||||
@ -76,6 +68,8 @@ nn <silent> xk :call LanguageClient#findLocations({'method':'$ccls/navigate','di
|
|||||||
nn <silent> xl :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'R'})<cr>
|
nn <silent> xl :call LanguageClient#findLocations({'method':'$ccls/navigate','direction':'R'})<cr>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
![](https://ptpb.pw/89Y2.gif)
|
||||||
|
|
||||||
### Custom cross references
|
### Custom cross references
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
|
Loading…
Reference in New Issue
Block a user