What's special about youcompleteme based on semantic complements
As is known to all, itVimis a text editor. That is, the most basic work is to edit the text , regardless of the content of the text.Vimafter being used by programmers, they are slowly being entrusted with the same work as the IDE, Text Auto-completion (ie.acp,omnicppcompleter), code Check (Syntastic), etc. work.
There are two main implementations of this function for text auto-completion .
What we often use, theomnicppcompleteracpway vim comes into being,c-x, c-nis based on text. The more popular saying is actually a word:
Guess
It uses text to make some regular expression matching, and then according to the generated tags (using thectagsbuild) to achieve the effect of auto-completion.
As the name implies, it is through the analysis of the source files , after the completion of the grammar analysis . Because of the analysis of the source files, semantic-based complements can be very accurate. But this is clearly not what vim could support. And after all these years of development, Due to the high degree of difficulty in parsing, there have been no suitable tools. Until, backed by Apple , turned outclang/llvm.YouCompleteMeisclang/llvmbuilt on the basis of it.
Integrated implementation of a variety of plug-ins
- Clang_complete
- Autocomplpop
- Supertab
- Neocomplcache
- Syntastic (similar function, only for C/C++/OBJ-C code)
Supported languages
For other languages, the Vim settings are calledomnifuncto match, so the same supportsphp, and sorubyon.
Known to have * Javascript--tern_for_vim * ruby/java--eclim
:
The configuration of my vim can be seen here
Youcompleteme requires VIM version 7.3.584+, which is described in the previous Vim7.4 method of compiling and installing. At the same time Youcompleteme requires the clang version to be more than 3.3. If you want to get the latest clang, you can use SVN to compile the installation according to the method described on the official web site. We are here to introduce the source code compiled installation clang3.3.
- Vim Auto-complete plug-in----youcompleteme installation and configuration
- Compiling and installing iivm-clang3.3
- Installing the Clang standard library
- Installation Configuration Youcompleteme
Compiling and installing llvm-clang3.3
First download the following 4 source code: llvm-3.3 Source code clang-3.3 source code clang-tools-extra-3.3 source code compiler-rt-3.3 source code to establish a directory:
mkdir ~/llvm-clang
Unzip each of the 4 downloaded files to the above list
tar -xvzf llvm-3.3.src.tar.gz
tar -xvzf compiler-rt-3.3.src.tar.gz
tar -xvzf clang-tools-extra-3.3.src.tar.gz
tar -xvzf cfe-3.3.src.tar.gz
Then move the tool to the corresponding directory of LLVM, so that Clang,clang-tools-extra and Compiler-rt can be compiled with the LLVM:
mv cfe-3.3.src/ llvm-3.3.src/tools/clang/
mv clang-tools-extra-3.3.src/ llvm-3.3.src/tools/clang/extra/
mv compiler-rt-3.3.src/ llvm-3.3.src/projects/compiler-rt/
Download the latest LLVM, clang and Auxiliary Library source code available:
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ..
Return to the ~/llvm-clang directory and create a new directory Llvm-build dedicated to compiling Llvm-clang, so that no source code.
mkdir llvm-build
cd llvm-build/
../llvm-3.3.src/configure --enable-optimized
Building a compilation environment
After this configuration, Llv-clang is installed by default to the directory/usr/local/, if you want to change the installation directory, add the configuration:--prefix=path to make the inputmake -j4
(My machine is dual core) start compiling
sudo make install
To install
If you want to uninstall, enter it in this directory
sudo make uninstall
Once installed, enterclang -vview version information:
Installing the Clang standard library
Clang's standard library ———— libc++ (interface layer) and Libc++abi (Implementation layer) require installation of header files and dynamic-link libraries (*.so).
The header file has been generated~/llvm-clang/libcxx/include/, to let Clang find must be copied to/usr/include/c++/v1/
cp -r ~/llvm-clang/libcxx/include/ /usr/include/c++/v1/
*.so file has been generated ~/llvm-clang/libcxx/lib/libc++.so.1.0, to make clang access must be copied to/usr/lib/and create a soft link
ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so.1
ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so
cp ~/dllvm-clang/libcxx/lib/libc++.so* /usr/lib/
Similarly, the source code installs the Libc++abi header file and the dynamic link library:
cd ~/llvm-clang/
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
cd libcxxabi/lib
./buildit
The header file has been generated~/llvm-clang/libcxxabi/include/, to let Clang find must be copied to/usr/include/c++/v1/
cp -r ~/llvm-clang/libcxxabi/include/ /usr/include/c++/v1/
*.so file has been generated~/llvm-clang/libcxx/lib/libc++abi.so.1.0, to make clang access must be copied to/usr/lib/, and create a soft link
ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so.1
ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so
cp ~/llvm-clang/libcxxabi/lib/libc++abi.so* /usr/lib/
Subsequent code compilation can be done with the following options:
clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro- expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno- global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -lc++ -lc++abi main.cpp
Parameter description:
- -STD=C++11: Use of c++11 new features;
- -stdlib=libc++: Specifies the standard library header file/usr/include/c++/v1/that uses clang;
- -werror: treats all compile warnings as compilation errors;
- -weverything: Turns on all compilation warning options. In GCC, it is not possible to open all compilation warnings through a single option, and it must be tedious to specify-wall,-wextra, and a large number of other options that are scattered, adding-weverything to this clang. Of course, some warnings have little meaning and are totally negligible, as follows;
- -wno-disabled-macro-expansion: Suppresses the use of macro expressions, ignoring this warning;
- -wno-float-equal: Floating-point types should not use the! = and = = operators, ignoring this warning;
- -wno-c++98-compat,-wno-c++98-compat-pedantic: Code with C++11 new features is incompatible with c++98, ignoring this warning;
- -wno-global-constructors: There is code executed before main (), ignoring this warning;
- -wno-exit-time-destructors: There is code executing after main (), ignoring this warning;
- -wno-missing-prototypes: Although there are function definitions but missing function prototypes, ignore this warning;
- -wno-padded: The struct size should be 4-byte integer times, ignoring this warning (the compiler automatically adjusts the alignment boundary);
- -lc++: Specify the link/usr/lib/libc++.so standard library;
- -lc++abi: Specifies the link/usr/lib/libc++abi.so standard library. Note: These two options are important and missing will cause the link to fail!
These parameters are set in the Youcompleteme configuration file. ycm_extra_conf.py's Flags
Installation Configuration Youcompleteme
-
- Download the source code. Use Vundle to get it done, add in the VIMRC file
Bundle ‘Valloric/YouCompleteMe‘
-
- Execute command:
$ cd ~
$ mkdir ~/ycm_build
$ cd ~/ycm_build
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBclang=ON -DEXTERNAL_LIBCLANG_PATH=CLANG_INSTALL_PATH/libclang.so . ~/.vim/bundle/YouCompleteMe/cpp
Note: The clang_install_path here should be replaced by your own libclang.so directory, such as mine is /ycm_temp/llvmsrc/build/release+asserts/lib (i.e.: The compilation of the above steps Llvm-clang generated), if installed under/usr/local/lib/also have libclang.so, this directory can also. Can be viewed via sudo find/-name "libclang.so"-print
-
- Generate libclang.so and ycm_core.so files in Youcompleteme
Executemake ycm_core, this will automatically generate two files (libclang.so and ycm_core.so) in the ~/.vim/bundle/youcompleteme/python/directory
-
- This is not enough, and you must also execute the command:make ycm_support_libs. This command only generates a third file, ycm_client_support.so. Because, Youcompleteme is the C/s architecture, so there is the server and service side of the argument.
-
- Final settings.ycm_extra_conf.pyfile.
- To add a configuration in. VIMRC:
"Autocomplete Configuration
set completeopt = longest, menu "Make Vim's completion menu behave the same as the general IDE (refer to VimTip1228)
autocmd InsertLeave * if pumvisible () == 0 | pclose | endif "Close the preview window automatically after leaving insert mode
inoremap <expr> <CR> pumvisible ()? "\ <C-y>": "\ <CR>" "Enter to select the current item
"The behavior of the up, down, left, and right keys displays additional information
inoremap <expr> <Down> pumvisible ()? "\ <C-n>": "\ <Down>"
inoremap <expr> <Up> pumvisible ()? "\ <C-p>": "\ <Up>"
inoremap <expr> <PageDown> pumvisible ()? "\ <PageDown> \ <C-p> \ <C-n>": "\ <PageDown>"
inoremap <expr> <PageUp> pumvisible ()? "\ <PageUp> \ <C-p> \ <C-n>": "\ <PageUp>"
"youcompleteme default tab s-tab and autocompletion conflict
"let g: ycm_key_list_select_completion = [‘ <c-n> ‘]
let g: ycm_key_list_select_completion = [‘<Down>‘]
"let g: ycm_key_list_previous_completion = [‘ <c-p> ‘]
let g: ycm_key_list_previous_completion = [‘<Up>‘]
let g: ycm_confirm_extra_conf = 0 "Close loading.ycm_extra_conf.py
let g: ycm_collect_identifiers_from_tags_files = 1 "Enable YCM tag-based engine
let g: ycm_min_num_of_chars_for_completion = 2 "List matches starting at the second character typed
let g: ycm_cache_omnifunc = 0 "Disable caching of matches and regenerate them every time
let g: ycm_seed_identifiers_with_syntax = 1 "syntax keyword completion
nnoremap <F5>: YcmForceCompileAndDiagnostics <CR> "force recomile with syntastic
"nnoremap <leader> lo: lopen <CR>" open locationlist
"nnoremap <leader> lc: lclose <CR>" close locationlist
inoremap <leader> <leader> <C-x> <C-o>
"Complete in comment input
let g: ycm_complete_in_comments = 1
"Complete in string input
let g: ycm_complete_in_strings = 1
"Text in comments and strings is also completed
let g: ycm_collect_identifiers_from_comments_and_strings = 0
nnoremap <leader> jd: YcmCompleter GoToDefinitionElseDeclaration <CR> "jump to the definition
Vim Auto-complete artifact –youcompleteme