7. VIM 系列 - 程序員利器(語法檢測、代碼塊補全、symbol管理、函數跳轉)


1. 語法檢查利器 ale

安裝 ale

Plug 'w0rp/ale'

配置

  • 顯示狀態欄+不需要高亮行
let g:ale_sign_column_always = 1
let g:ale_set_highlights = 0
  • 錯誤和警告標志
let g:ale_sign_error = 'x'
let g:ale_sign_warning = '!'
  • 文件保存時,顯示警告
let g:ale_lint_on_text_changed = 'never'
let g:ale_lint_on_enter = 0
  • 使用clang對c和c++進行語法檢查,對python使用pylint進行語法檢查
let g:ale_linters = {
\   'c++': ['clang'],
\   'c': ['clang'],
\   'python': ['pylint'],
\}

使用clang分析的話,確保clang已經安裝, 如若沒有安裝,即可運行如下命令進行安裝

sudo apt-get install clang
  • 效果圖

2. 補全代碼塊

  • 安裝
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
  • 配置
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-h>"
let g:UltiSnipsJumpBackwardTrigger="<c-l>"

使用vim打開文件,輸入main,然后敲 tab,會有如下效果

:插件有默認的代碼塊模板,若是需要自定義,則去~/.vim/plugged/vim-snippets 路徑下修改。

3. symbol 管理器 taglist.vim

taglist.vim 插件依賴ctags,所有首先得安裝ctags。

安裝ctags

$ sudo apt install -y exuberant-ctags

在.vimrc上配置

set tags=./.tags;,.tags

安裝taglist.vim插件

Plug 'vim-scripts/taglist.vim'

插件配置

map <silent> <F10> :TlistToggle<cr>

效果圖

normal模式下按下<F10>
出現如下效果

自動更新symbol

使用vim-gutentags 自動更新tags文件。

安裝vim-gutentags插件

Plug 'ludovicchabant/vim-gutentags'

配置插件

" gutentags 搜索工程目錄的標志,碰到這些文件/目錄名就停止向上一級目錄遞歸
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']

" 所生成的數據文件的名稱
let g:gutentags_ctags_tagfile = '.tags'

" 將自動生成的 tags 文件全部放入 ~/.cache/tags 目錄中,避免污染工程目錄
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags

" 配置 ctags 的參數
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

" 檢測 ~/.cache/tags 不存在就新建
if !isdirectory(s:vim_tags)
   silent! call mkdir(s:vim_tags, 'p')
endif

:gutentags 需要靠上面定義的 project_root 里的標志,判斷文件所在的工程,如果一個文件沒有托管在 .git/.svn 中,gutentags 找不到工程目錄的話,就不會為該野文件生成 tags,這也很合理。想要避免的話,你可以在你的野文件目錄中放一個名字為 .root 的空白文件,主動告訴 gutentags 這里就是工程目錄。

更新symbol

function! UpdateCtags()
    TlistUpdate
endfunction

autocmd BufWritePost *.c,*.h,*.cpp call UpdateCtags()

保存文件時候,更新symbol。

4. 函數跳轉

函數跳轉也是用到了tags文件,symbol管理已經將相關環境安裝好了。

<c-]>:跳轉到定義處。

<c-t>:往回跳轉

<c-w>]:新建一個窗口,並顯示定義。

<c-w>c:關閉窗口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM