Comments
You can use your Mastodon account to reply to this post.
Recently, Steve Francia’s Vim Distribution (aka vim-spf13) brought a new life to my aging vimrc dotfile. It bundles most of the popular plugins that makes you life as a programmer easier (Syntastics, ctrlp, …). The only thing missing to make it into a good IDE is a completion plugin for C and C++. In this brief blog entry, I’ll show you how to install YouCompleteMe on CentOS and improve your Vim experience.
As I said, this small howto will walk you through installing YouCompleteMe and Jedi on a CentOS 6.3 system. YouCompleteMe will offer C/C++ autocompletion based on the suggestion provided by clang. The YoucCompleteMe plugin website offers a great deal of information on how to install the plugin and its dependencies.
On most distros, you’ll install this plugin in a breeze. Other distros, like CentOS will make you life tougher. Because I found it to complete, I was compelled to write this documentation page. I will mostly focus on fixing these two main issues:
You need cmake28 to compile the plugin. Install it is as easy as:
sudo yum install -y cmake28
The version of Vim shipped with CentOS at the time of the writing of this entry is 7.2.xxx, whereas vim-spf13 requires the 7.3.xxx branch and YouCompleteMe requires at least Vim 7.3.584.
Before anything else, you need to install a newer version of Vim. In my case, I installed the source RPM of Vim in the latest Fedora and compiled it. You can find a slightly modified source RPM. Install this archive with rpm -i and build the packages from the source using rpmbuild -bb vim.spec (this file should be in your SPEC subdirectory of the rpmbuild directory, which should be located in your home by default).
For more information, you can look at the dedicated CentOS page.
This plugin WILL conflict with other plugins part of the vim-spf13 default distribution. They should be disabled first, add the following lines to your ~/.vimrc.local:
UnBundle 'Shougo/neocomplcache'
UnBundle 'pythoncomplete'
Now, you need to tell Vim to actually removes both packages:
vim -c ':BundleClean!'
Also, you should undo some default binding of vim-spf13 so that they don’t conflict with YouCompleteMe later on. Again, edit your ~/.vimrc.local and add the following lines:
iunmap <expr><s-CR>
iunmap <expr><CR>
iunmap <expr><BS>
iunmap <expr><C-y>
Add the following line to you ~/.vimrc.bundles.local
Bundle 'Valloric/YouCompleteMe'
Bundle 'davidhalter/jedi'
Now ask Vim to install these packages:
vim -c ':BundleInstall'
The YouCompleteMe plugin installation is not complete just yet. It needs you to compile things, and that where it gets hairy on CentOS (because the clang version shipped with the system is too old).
In order to get YouCompleteMe to work, a recent version of clang is required. While you can build from source, I preferred to save some time and downloaded a version that was built for my system. Ryan Prichard hosts built version for for a lot of systems that are not pre-packaged in the clang website (many thanks to him!). You can download an archive on his project’s website. In my case, I downloaded the x86_64 version.
I extracted the tarball in a ~/tools directory (located in my home). If this directory does not exists, you can create it with:
mkdir ~/tools
Then I did the following to build the plugin:
mkdir ~/.vim/bundle/YouCompleteMe/ycm_build
cd ~/.vim/bundle/YouCompleteMe/ycm_build
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/tools/clang-3.2-1-x86_64-linux/lib
cmake28 -G "Unix Makefiles" \
-DPATH_TO_LLVM_ROOT=~/tools/clang-3.2-1-x86_64-linux/ . ~/.vim/bundle/YouCompleteMe/cpp
make
If everything goes fine, the make command completes. One last step remains, if you don’t want to have to overload the LD_LIBRARY_PATH variable each time you use the plugin. You need to copy the libllvm.so file in a path where the plugin can always find it. In my case, I did the following:
cp tools/clang-3.2-1-x86_64-linux/lib/libLLVM-3.2svn.so ~/.vim/bundle/YouCompleteMe/python
You’re all set, but don’t forget to read the YouCompleteMe manual, or else you might omit to create a .ycm_extra_conf.py in you C/C++ project directory and think the plugin is malfunctioning.
My name is Tony Cheneau and I’m currently a devops (catchy title) at ANSSI.
I was previously occupying a postdoc position at the National Institute of Standards and Technology (also known as NIST), in the Advanced Network Technologies Division. This was a really entertaining job where my main research interests are focused on wireless applications over the Smart Grid and defining new security solution for these applications.
If you are interested in my education (or in hiring me), you can check out my very formal (and not so up to date) resume.pdf.
During my PhD, I studied several aspects of the Link-Layer security. through the extended use of the Secure Neighbor Discovery protocol (RFC 3971 and RFC 3972).
Other of my previous research interests included MANEMO. MANEMO is the combination of multiple research areas:
Back in time, I made some propositions inside the CGA and SEND maIntenance working (CSI) group:
During my PhD, I happened to give some lecture: