自动补全
http://svn.php.net/viewvc/phpdoc/doc-base/trunk/funclist.txt
YouCompleteMe+syntastic vim自己主动补全插件
自动补全
ctags --list-kinds=php
ctrl+w] 切换在当前窗口
查看出错信息
:YcmDebugInfo
superTab: 上下文补全插件
L9: vim-script
Syntastic: 语法检查
AutoComplPop: 函数自动补全
snipMate: 语法结构补全if else;while;for
AutoComplPop:
au FileType php setlocal dict+=$VIM/vimfiles/bundle/AutoComplPop/dict/php_funclist.txt
" if !exists('g:AutoComplPop_Behavior')
" let g:AutoComplPop_Behavior = {}
" let g:AutoComplPop_Behavior['php'] = []
" call add(g:AutoComplPop_Behavior['php'], {
" \ 'command' :"\\",
" \ 'pattern' : printf('−>∥::∥$\k\{%d,}$', 0),
" \ 'repeat' : 0,
" \})
" endif
CMake安装:
wget https://github.com/Kitware/CMake/releases/download/v3.16.4/cmake-3.16.4.tar.gz
cd cmake-3.16.4
./bootstrap
gmake
gmake install
VIM8.2安装:
git clone https://github.com/vim/vim.git
make clean
./configure \
--with-features=huge \
--enable-multibyte \
--enable-rubyinterp \
--enable-pythoninterp \
--enable-python3interp \
--with-python-config-dir=/usr/lib64/python2.7/config \
--with-python3-config-dir=/usr/local/python/lib/python3.7/config-3.7m-x86_64-linux-gnu \
--enable-luainterp \
--enable-cscope \
--prefix=/usr
make VIMRUNTIMEDIR=/usr/share/vim/vim82
make install
YouComplete工作原理
补全引擎:基于当前文件和你要访问的文件(和tags文件)生成标签库,每次输入时,在标签库里面搜索。
YouCompleteMe插件过大,用Vundle插件管理器安装过程中会报错,介绍一种用源码安装的方式。
1. 首先要保证已经安装Vundle
2. 进入目录
cd ~/.vim/bundle
3. 克隆代码
git clone https://github.com/Valloric/YouCompleteMe.git
4. 进入目录执行下面命令
cd YouCompleteMe
git submodule update --init --recursive
5. 安装
yum -y install golang
仅安装支持Python的版本:
./install.py
安装支持C语言家族的版本:
./install.py --clang-completer
安装支持go语言的版本:
./install.py --go-completer
安装支持Js、Java、Python、go所有语言的版本:
./install.py --all
vimrc配置
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
" 不显示开启vim时检查ycm_extra_conf文件的信息
let g:ycm_confirm_extra_conf = 0
" 开启基于tag的补全,可以在这之后添加需要的标签路径
let g:ycm_collect_identifiers_from_tags_files = 1
" 开启语义补全
let g:ycm_seed_identifiers_with_syntax = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
" 输入第 2 个字符开始补全
let g:ycm_min_num_of_chars_for_completion= 2
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"定义快捷健补全
let g:ycm_key_list_select_completion = ['<c-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']
" 设置在下面几种格式的文件上屏蔽ycm
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'qf' : 1,
\ 'notes' : 1,
\ 'markdown' : 1,
\ 'unite' : 1,
\ 'text' : 1,
\ 'vimwiki' : 1,
\ 'pandoc' : 1,
\ 'infolog' : 1,
\ 'mail' : 1
\}
"设置关健字触发补全
let g:ycm_semantic_triggers = {
\ 'c' : ['->', '.', ' ', '(', '[', '&'],
\ 'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',
\ 're!\[.*\]\s'],
\ 'ocaml' : ['.', '#'],
\ 'cpp,objcpp' : ['->', '.', '::'],
\ 'perl' : ['->'],
\ 'php' : ['->', '::'],
\ 'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],
\ 'ruby' : ['.', '::'],
\ 'lua' : ['.', ':'],
\ 'erlang' : [':'],
\ }
let g:ycm_cache_omnifunc = 1
let g:ycm_use_ultisnips_completer = 1
"定义函数跟踪快捷健
nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
安装universal ctags(取代exuberant-ctags)
git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh
./configure
make
sudo make install
ctags --list-languages
ctags --list-maps
ctags --list-maps=php
ctags --list-kinds
ctags -R
ctags -f php.tags --languages=PHP -R
ctags `find . -name '*.phpr'
ctags -R --exclude=vendor --exclude=*test* --languages=PHP //排除目录
ctags -R vendor --languages=PHP //子目录
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
c++-kinds: 用于指定C++语言的 tags记录类型,
--c-kinds: 用于指定c语言的,通用格式是--{language}-kinds:
--fileds: 用于指定每条标记的扩展字段域
--extra: 用于增加额外的条目: f表示为每个文件增加一个条目,q为每个类增加一个条目
:set tags=php.tags
:set tags+=vendor.tags
:set tags=php.tags, vendor.tags
:tag MyClass
:tag My<tab>
# vim ~/.tags
-R
--languages=php
--php-kinds=ctif
--exclude=*test*
--exclude=vendor/*/vendor
--fields=+aimS
# vim .vimrc
set tags+=tags.vendor
set tags=./tags;,tags //;号,向上搜索
autocmd BufWritePost *.php silent execute "!ctags src"
快捷键:
<1> 把光标移到变量名或函数名上,然后按下Ctrl-]。用Ctrl-t退回原来的地方。
<2> 在函数中移动光标
[{ 转到上一个位于第一列的"{"
}] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行 ([ and ] 也分别是两个指令)
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
| Ctrl-] | Jump to the tag underneath the cursor |
| :ts <tag> <RET> | Search for a particular tag |
| :tn | Go to the next definition for the last tag |
| :tp | Go to the previous definition for the last tag |
| :ts | List all of the definitions of the last tag |
| Ctrl-t | Jump back up in the tag stack |