Ubuntu 16.04 vim YouCompleteMe自動補全的安裝配置與使用

1. 移除vim

sudo?apt-get remove vim vim-runtime gvim

sudo?apt-get remove vim-tiny vim-common vim-gui-common vim-nox

2.安裝vim

sudo apt-get update

sudo apt-get install vim

sudo?apt-get?install?build-essential cmake?python3-dev

3.配置.vimrc

cd ~

vim .vimrc

拷貝一下內容到.vimrc內

"---------------------------------------------------

"? ? ? ? ? ? ? ? Vundle插件管理

"---------------------------------------------------

set nocompatible? ? ? ? ? ? ? " be iMproved, required

filetype off? ? ? ? ? ? ? ? ? " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" let Vundle manage Vundle, required

Plugin 'VundleVim/Vundle.vim'

Plugin 'Valloric/YouCompleteMe'

" All of your Plugins must be added before the following line

call vundle#end()? ? ? ? ? ? " required

filetype plugin indent on? ? " required

"--------------------------------------------------

"? ? ? ? ? ? ? ? ? ? YCM

"--------------------------------------------------

set runtimepath+=~/.vim/bundle/YouCompleteMe

let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

? " YCM 查找定義

let mapleader=','

nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>

nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>

nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>

let g:ycm_collect_identifiers_from_tags_files = 1

set completeopt=menu,menuone

let g:ycm_add_preview_to_completeopt = 0? " 關閉函數(shù)原型提示

let g:ycm_show_diagnostics_ui = 0 " 關閉診斷信息

let g:ycm_server_log_level = 'info'

let g:ycm_min_num_identifier_candidate_chars = 2? " 兩個字符觸發(fā) 補全

let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 收集

let g:ycm_complete_in_strings=1

noremap <c-z> <NOP>

let g:ycm_key_invoke_completion = '<c-z>'? " YCM 里觸發(fā)語義補全有一個快捷鍵

let g:ycm_max_num_candidates = 15? " 候選數(shù)量

let g:ycm_semantic_triggers =? {

? ? ? ? ? ? ? ? ? ? ? ? \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],

? ? ? ? ? ? ? ? ? ? ? ? \ 'cs,lua,javascript': ['re!\w{2}'],

? ? ? ? ? ? ? ? ? ? ? ? \ }

"----------------------------------------

"? ? ? ? ? ? ? ctags: ctags -R

"----------------------------------------

if filereadable("tags")

? ? ? ? set tags=tags

endif

4. 下載YouCompleteMe

在用戶家目錄下執(zhí)行命令:git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe

5.1 安裝Youcomplete

cd? ~/.vim/bundle/YouCompleteMe

git submodule update --init --recursive

./install.py --clang-completer

5.2如果遇到libclang-10.0.0-x86_64-unknown-linux-gnu.tar.bz2 下載失敗解決如下:

????進入/etc/resolv.conf。

????修改內容為下

????nameserver 8.8.8.8 #google域名服務器

????nameserver 8.8.4.4 #google域名服務器

????cd? ~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_archives

????mv libclang-7.0.0-x86_64-unknown-linux-gnu.tar.bz2? libclang-7.0.0-x86_64-unknown-linux-gnu.tar.bz2.old

????wget? https://dl.bintray.com/micbou/libclang/libclang-7.0.0-x86_64-unknown-linux-gnu.tar.bz2


6. 配置ycm_extra_conf.py

路徑與.vimrc中相同 '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'?

添加如下:

# Copyright (C) 2014 Google Inc.

#

# This file is part of ycmd.

#

# ycmd is free software: you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation, either version 3 of the License, or

# (at your option) any later version.

#

# ycmd is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.? See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with ycmd.? If not, see <http://www.gnu.org/licenses/>.

import os

import ycm_core

# These are the compilation flags that will be used in case there's no

# compilation database set (by default, one is not set).

# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.

flags = [

'-Wall',

'-Wextra',

'-Werror',

'-fexceptions',

'-DNDEBUG',

# THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which

# language to use when compiling headers. So it will guess. Badly. So C++

# headers will be compiled as C headers. You don't want that so ALWAYS specify

# a "-std=<something>".

# For a C project, you would set this to something like 'c99' instead of

# 'c++11'.

'-std=c++11',

# ...and the same thing goes for the magic -x option which specifies the

# language that the files to be compiled are written in. This is mostly

# relevant for c++ headers.

# For a C project, you would set this to 'c' instead of 'c++'.

'-x',

'c++',

'-isystem',

'/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0',

'-isystem',

'/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/x86_64-apple-darwin17.7.0',

'-isystem',

'/usr/include',

'-isystem',

'/usr/local/include',

'/usr/local/lib',

'-isystem',

'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1',

'-isystem',

'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include'

]

# Set this to the absolute path to the folder (NOT the file!) containing the

# compile_commands.json file to use that instead of 'flags'. See here for

# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html

#

# Most projects will NOT need to set this to anything; you can just change the

# 'flags' list of compilation flags.

compilation_database_folder = ''

if os.path.exists( compilation_database_folder ):

? database = ycm_core.CompilationDatabase( compilation_database_folder )

else:

? database = None

SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]

def DirectoryOfThisScript():

? return os.path.dirname( os.path.abspath( __file__ ) )

def IsHeaderFile( filename ):

? extension = os.path.splitext( filename )[ 1 ]

? return extension in [ '.h', '.hxx', '.hpp', '.hh' ]

def GetCompilationInfoForFile( filename ):

? # The compilation_commands.json file generated by CMake does not have entries

? # for header files. So we do our best by asking the db for flags for a

? # corresponding source file, if any. If one exists, the flags for that file

? # should be good enough.

? if IsHeaderFile( filename ):

? ? basename = os.path.splitext( filename )[ 0 ]

? ? for extension in SOURCE_EXTENSIONS:

? ? ? replacement_file = basename + extension

? ? ? if os.path.exists( replacement_file ):

? ? ? ? compilation_info = database.GetCompilationInfoForFile(

? ? ? ? ? replacement_file )

? ? ? ? if compilation_info.compiler_flags_:

? ? ? ? ? return compilation_info

? ? return None

? return database.GetCompilationInfoForFile( filename )

# This is the entry point; this function is called by ycmd to produce flags for

# a file.

def FlagsForFile( filename, **kwargs ):

? if not database:

? ? return {

? ? ? 'flags': flags,

? ? ? 'include_paths_relative_to_dir': DirectoryOfThisScript()

? ? }

? compilation_info = GetCompilationInfoForFile( filename )

? if not compilation_info:

? ? return None

? # Bear in mind that compilation_info.compiler_flags_ does NOT return a

? # python list, but a "list-like" StringVec object.

? return {

? ? 'flags': list( compilation_info.compiler_flags_ ),

? ? 'include_paths_relative_to_dir': compilation_info.compiler_working_dir_

? }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容