Open codetalks-new opened 5 years ago
当我们使用如 gf
等指令查找当前包含的头文件时,很多文件会提示找不到.
查看 vim 的变量我们可以发现,默认的path
变量只包含 .,/usr/include,,
也就是当前路径和 /usr/include
根据我们上面使用 clang-8 或者 gcc
clang-8 -c anyfile.c -v
从中可以找到如下信息:▶ clang-8 -c fib.c -v
clang version 8.0.1-svn360950-1~exp1~20190517004233.70 (branches/release_80)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/usr/lib/llvm-8/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name fib.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -v -coverage-notes-file /home/codetalks/Workspace/learn-c/linux-c/fib.gcno -resource-dir /usr/lib/llvm-8/lib/clang/8.0.1 -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-8/lib/clang/8.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /home/codetalks/Workspace/learn-c/linux-c -ferror-limit 19 -fmessage-length 174 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -o fib.o -x c fib.c -faddrsig
clang -cc1 version 8.0.1 based upon LLVM 8.0.1 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/llvm-8/lib/clang/8.0.1/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
gcc -c anyfile.c -v
来查看.配置好之后,现在可以方便的使用 gf
命令来跳转头文件声明的位置. 使用 <C-o>
跳转(打开)对应文件,使用 <C-i>
关闭(返回上一个跳转位置)
前面使用 YCM 配置了自动补全. 现在加上使用 snippets.
插件安装及配置如下:
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger="<C-l>"
let g:UltiSnpsEditSplit="vertical"
上面配置中 <C-l>
表示 CTRL + l
选定对应的补全项.
可以使用 <C-j>
,<C-j>
来在补全代码的占位符之间跳转.
Vim 基本配置
默认情况下没有安装完整的 Vim 包.可以直接通过
sudo apt install vim
来安装.Vim 插件
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
基本使用见
vim-plug
文档说明.安装 global 用于 vim 的符号检索
sudo apt install global
配置 gnutags 相关插件. 如下: 参考 Vim 8 中 C/C++ 符号索引:GTags 篇
" enable gtags module let g:gutentags_modules = ['gtags_cscope'] " " config project root markers. let g:gutentags_project_root = ['.root','.svn','.git','.hg','.project'] " generate datebases in my cache directory, prevent gtags files polluting my " project let g:gutentags_cache_dir = expand('~/.cache/tags') " change focus to quickfix window after search (optional). let g:gutentags_plus_switch = 1 let g:gutentags_define_advanced_commands = 1 let g:gutentags_auto_add_gtags_cscope = 1
最简单的是进入到 插件根目录 安装. 例如
cd ~/.vim/plugged/YouCompleteMe/ && python3 install.py --clang-completer
复杂安装如下,指定我们安装的 llvm-8
mkdir -p ~/ycm_build && cd ~/ycm_build && cmake -G "Unix Makefiles" -DUSE_PYTHON2=OFF -DPATH_TO_LLVM_ROOT=/usr/lib/llvm-8 ~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp && cmake --build . --target ycm_core
相关输出如下:
安装 LLVM 8
参考 http://apt.llvm.org/
添加源,在
/etc/apt/sources.list.d/
目录下创建一个源列表文件即可添加 GPG
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key |sudo apt-key add -
安装 LLVM 8 安装基本工具. 其他的按需要安装参考上面文档.
apt-get install clang-8 lldb-8 lld-8
安装好之后为了方便使用,可以添加两个别名.