youcompleteme 跳转插件为什么不能提示函数

Golang-Vim环境搭建-OSX
| Golang中文社区(Go语言构建) | Go语言中文网 | Go语言学习园地
<meta name="author" content="polaris ">
Golang-Vim环境搭建-OSX
Golang-Vim环境搭建-OSX
接触Golang之后使用过许多的编辑器比如liteidea,sublime2,idea其中我最钟爱的就是idea了后来偶然有一次使用到了Vagrant搭建虚拟开发环境于是乎不得不用vim进行开发,为了快速开发自然要安装许多便捷的插件.当然安装这些插件不得不说把我恶心到了,虽然说有一部分是我自己的原因.好吧我就先上一张效果图大家先看下vim这个编辑器之神的模样.
有木有相当的狂炫酷霸吊炸天呢哈哈 开始vim的插件安装吧
首先vim的插件安装有两种形式,一直直接自己安装到~/.vim/plugin目录下 另外一种是使用插件管理器Vundle(还有其他的插件管理器)
我先介绍下要安装的种类
1 gmarik/Vundle.vim 这个就是插件管理器
2 &#39;Valloric/YouCompleteMe&#39; 代码自动完成的插件
3 goimports 会自动删除导入import的包
4 godef 可以跳转到函数定义处
5 gocode 这个就是go代码自动完成的插件装了YouCompleteMe之后就不需要再点击ctrl x才出现 而是敲代码时自动出现
6 gotags 这个可以方便你查看源码 也就是上图右边的那一部分
7 NerdTree 这个可以查看目录结构也是很方便的
~/.vimrc是一个关于vim的配置文件(如果你没有自己在~/目录下mkdir ~/.vimrc文件)我会在文章最后贴上我的.vimrc的完整配置
GOBIN目录一定要确保正确必须在你的PATH环境变量当中如果你设置了多个GOPATH那么你一定要确保你所设定的GOBIN目录中有安装插件的可执行文件
vundle安装(git的安装自行Google)
git clone /gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
在.vimrc中添加一下内容则完成了 vundle对vim的插件管理部分 以后需要什么插件通过配置该文件就可以了
filetype off
filetype plugin indent off
set rtp+=$VIM/vimfiles/bundle/vundle/
&#34;rc后的参数表示Vundle自动下载安装插件的位置,为空放在~/.vim/下
call vundle#rc(&#39;$VIM/vimfiles/bundle/&#39;)
Bundle &#39;gmarik/vundle&#39;
filetype plugin indent on
syntax ongoimports安装
go get /p/go.tools/cmd/goimports
go install /p/go.tools/cmd/goimports
github上也有goimports但是上面有一段介绍This project has moved to the official go.tools repo 所以就不适用github的地址
在.vimrc中添加
Bundle &#39;cespare/vim-golang&#39;
let g:gofmt_command = &#34;goimports&#34;
autocmd BufWritePre *.go :Fmt
重新开启vim,命令模式下执行:BunduleInstall
使用方法: 在命令模式下 输入:Fmt
goimports会在后台被自动调用,对当前编辑的文件排版,并在文件中插入/删除相应的import语句
go get /p/rog-go/exp/cmd/godef
go install /p/rog-go/exp/cmd/godef
.vimrc中添加
Bundle &#39;dgryski/vim-godef&#39;
重新开启vim,命令模式下执行:BunduleInstall
使用方法打开一个go文件 光标指定到相应的函数 在命令模式下输入gd自动跳转到函数定义的位置
YouCompleteMe与gocode的安装安装
YCM的安装过程相当蛋疼一步步来吧
1 vim的版本必须是7.4以上的因为我的是osx10.9自带的vim是7.3的所以必须更新
首先从http://www.vim.org/download.php 下载一个最新版的vim下载下来之后
如果直接make编译一定是有问题很多问题 具体我就不一一描述了
按照下面的过程来编译吧解压源码进入src目录修改src/os_unix.c文件
#if !defined(__APPLE__) && !defined(__TANDEM)
# define select select_declared_wrong
#if defined(__APPLE__)
# include &AvailabilityMacros.h&
#endif返回src make clean 然后 ./configure --with-features=huge --enable-pythoninterp --enable-rubyinterp 再make
这时候make出来的vim就是可用的了否则无法用于YCM
修改~/.bash_profile文件添加一句话
alias vim=&#34;/Applications/Developer/tools/vim74/src/vim&#34;
source一下就可以了 vim --version查看vim版本如果是7.4则没问题了
在.vimrc中添加 Bundle &#39;Valloric/YouCompleteMe&#39;
然后:BundleInstall
然后在~/.vim/bundle/YouCompleteMe/目录下执行./install.sh
YCM安装好了 接下来安装gocode
go /nsf/gocode
go /nsf/gocode
在.vimrc里添加:Bundle &#39;Blackrush/vim-gocode&#39;
还要记得去/nsf/gocode/vim/ 下面执行 ./update.sh
重新开启vim,命令模式下执行:BunduleInstall
ctags和gotags安装
go /jstemmer/gotags
go /jstemmer/gotags
在~/.vimrc中添加以下内容
&#34; go tags
Bundle &#39;majutsushi/tagbar&#39;
nmap &F8& :TagbarToggle&CR&
let g:tagbar_type_go = {
\ &#39;ctagstype&#39; : &#39;go&#39;,
\ &#39;kinds&#39;
\ &#39;p:package&#39;,
\ &#39;i:imports:1&#39;,
\ &#39;c:constants&#39;,
\ &#39;v:variables&#39;,
\ &#39;t:types&#39;,
\ &#39;n:interfaces&#39;,
\ &#39;w:fields&#39;,
\ &#39;e:embedded&#39;,
\ &#39;m:methods&#39;,
\ &#39;r:constructor&#39;,
\ &#39;f:functions&#39;
\ &#39;sro&#39; : &#39;.&#39;,
\ &#39;kind2scope&#39; : {
\ &#39;t&#39; : &#39;ctype&#39;,
\ &#39;n&#39; : &#39;ntype&#39;
\ &#39;scope2kind&#39; : {
\ &#39;ctype&#39; : &#39;t&#39;,
\ &#39;ntype&#39; : &#39;n&#39;
\ &#39;ctagsbin&#39;
: &#39;gotags&#39;,
\ &#39;ctagsargs&#39; : &#39;-sort -silent&#39;
重新开启vim,命令模式下执行:BunduleInstall
NerdTree安装
直接在.vimrc加入以下内容就可以了
&#34; NerdTree use &C-n&
Bundle &#39;scrooloose/nerdtree&#39;
&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;
&#34; scrooloose/nerdtree setting
&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;
let NERDTreeWinPos=&#39;left&#39;
let NERDTreeWinSize=31
let NERDTreeChDirMode=1
map &C-n& :NERDTreeToggle&CR&
autocmd bufenter * if (winnr(&#34;$&#34;) == 1 && exists(&#34;b:NERDTreeType&#34;) && b:NERDTreeType == &#34;primary&#34;) | q | endif
下面贴出我的./vimrc的配置 仅供参考
: colorscheme desert
set number
set background=dark
set t_Co=256
set cursorline
set backspace=indent,eol,start
set fdm=indent
set completeopt=longest,menu
&#34; Golang
&#34; gofmt *.go files after saving
filetype off
filetype plugin indent off
set rtp+=$GOROOT/misc/vim
filetype plugin indent on
filetype plugin on
filetype indent on
&#34; Bundle
set nocompatible
let mapleader=&#34;,&#34;
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle &#39;gmarik/vundle&#39;
Bundle &#39;Valloric/YouCompleteMe&#39;
Bundle &#39;cespare/vim-golang&#39;
Bundle &#39;Blackrush/vim-gocode&#39;
Bundle &#39;dgryski/vim-godef&#39;
let g:godef_split=2
&#34; no backup
set nobackup
set noswapfile
&#34; encoding
set encoding=utf8
&#34; auto, smart indent
&#34; highlight search
set hlsearch
&#34; open file in the place last modified
autocmd BufReadPost *
\ if line(&#34;&#39;\&#34;&#34;)&0&&line(&#34;&#39;\&#34;&#34;)&=line(&#34;$&#34;) |
\exe &#34;normal g&#39;\&#34;&#34; |
&#34; go tags
Bundle &#39;majutsushi/tagbar&#39;
nmap &F8& :TagbarToggle&CR&
let g:tagbar_type_go = {
\ &#39;ctagstype&#39; : &#39;go&#39;,
\ &#39;kinds&#39;
\ &#39;p:package&#39;,
\ &#39;i:imports:1&#39;,
\ &#39;c:constants&#39;,
\ &#39;v:variables&#39;,
\ &#39;t:types&#39;,
\ &#39;n:interfaces&#39;,
\ &#39;w:fields&#39;,
\ &#39;e:embedded&#39;,
\ &#39;m:methods&#39;,
\ &#39;r:constructor&#39;,
\ &#39;f:functions&#39;
\ &#39;sro&#39; : &#39;.&#39;,
\ &#39;kind2scope&#39; : {
\ &#39;t&#39; : &#39;ctype&#39;,
\ &#39;n&#39; : &#39;ntype&#39;
\ &#39;scope2kind&#39; : {
\ &#39;ctype&#39; : &#39;t&#39;,
\ &#39;ntype&#39; : &#39;n&#39;
\ &#39;ctagsbin&#39;
: &#39;gotags&#39;,
\ &#39;ctagsargs&#39; : &#39;-sort -silent&#39;
autocmd BufWritePre *.go :Fmt
let g:gofmt_command = &#34;goimports&#34;
&#34; NerdTree use &C-n&
Bundle &#39;scrooloose/nerdtree&#39;
&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;
&#34; scrooloose/nerdtree setting
&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;
let NERDTreeWinPos=&#39;left&#39;
let NERDTreeWinSize=31
let NERDTreeChDirMode=1
map &C-n& :NERDTreeToggle&CR&
autocmd bufenter * if (winnr(&#34;$&#34;) == 1 && exists(&#34;b:NERDTreeType&#34;) &&b:NERDTreeType == &#34;primary&#34;) | q | endif
支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`、```go 高亮代码```
支持 @ 本站用户;支持表情(输入 : 提示),见
记住登录状态
还不是会员Vim 的 YouCompleteMe 插件怎么设置跳转到 PHP 的函数定义_百度知道
Vim 的 YouCompleteMe 插件怎么设置跳转到 PHP 的函数定义
YCM提供除C系PythonGoto definition用ctags吧或者省事找IDEvimrc 添加nnoremap &leader&jd :YcmCompleter GoToDefinitionElseDeclaration&CR&c/c++ 管用知道PHP否效
其他类似问题
为您推荐:
vim的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁VIM 下搭建 C++ 集成开发环境(5)
安装时间可以拿来睡个午觉
sudo apt-get install build-essential cmake
sudo apt-get install python-dev
cd ~/.vim/bundle/
git clone /Valloric/YouCompleteMe.git
cd YouCompleteMe/
//& 获取 YCM 的依赖包
git submodule update --init --recursive
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
.vimrc 中增加如下配置
& 菜单配色
highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
& 选中项配色
highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
&设置跳转的快捷键,可以跳转到definition和declaration &
nnoremap &leader&gc :YcmCompleter GoToDeclaration&CR& &
nnoremap &leader&gf :YcmCompleter GoToDefinition&CR& &
nnoremap &leader&gg :YcmCompleter GoToDefinitionElseDeclaration&CR& &
&nmap &F4& :YcmDiags&CR& &
& 补全功能在注释中同样有效
let g:ycm_complete_in_comments=1
& 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=0
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
& 开启 YCM 标签补全引擎
&let g:ycm_collect_identifiers_from_tags_files=1
& 引入 C&#43;&#43; 标准库tags
& set tags&#43;=/data/misc/software/misc./vim/stdcpp.tags
& YCM 集成 OmniCppComplete 补全引擎,设置其快捷键
inoremap &leader&; &C-x&&C-o&
& 补全内容不以分割子窗口形式出现,只显示补全列表
set completeopt-=preview
& 从第1个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=1
& 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
& 语法关键字补全&&&&&&& &
let g:ycm_seed_identifiers_with_syntax=1
&不查询ultisnips提供的代码模板补全,如果需要,设置成1即可 &
let g:ycm_use_ultisnips_completer=0
nnoremap &leader&jd :YcmCompleter GoToDefinitionElseDeclaration&CR&
inoremap &expr& &CR& pumvisible() ? &\&C-y&& : &\&CR&& &回车即选中当前项
let g:ycm_show_diagnostics_ui = 0 & 关闭ycm的syntastic
&let g:syntastic_cpp_compiler='g&#43;&#43;'& &change the compiler to g&#43;&#43; to support c&#43;&#43;11.
let g:syntastic_cpp_compiler='clang&#43;&#43;'& &change the compiler to clang to support c&#43;&#43;11.
let g:syntastic_cpp_compiler_options = '-std=c&#43;&#43;11 -stdlib=libc&#43;&#43;' &set the options of g&#43;&#43;( clang ) to suport c&#43;&#43;11.
在工程目录下新建一个文件& .ycm_extra_conf.py, 内容如下
import ycm_core
&&& '-std=c&#43;&#43;11',
&&& '-Werror',
&&& '-Weverything',
&&& '-Wno-deprecated-declarations',
&&& '-Wno-disabled-macro-expansion',
&&& '-Wno-float-equal',
&&& '-Wno-c&#43;&#43;98-compat',
&&& '-Wno-c&#43;&#43;98-compat-pedantic',
&&& '-Wno-global-constructors',
&&& '-Wno-exit-time-destructors',
&&& '-Wno-missing-prototypes',
&&& '-Wno-padded',
&&& '-Wno-old-style-cast',
&&& 'c&#43;&#43;',
&&& '/usr/include/',
&&& '/usr/include/c&#43;&#43;/4.8/'
compilation_database_folder = ''
if compilation_database_folder:
& database = pilationDatabase( compilation_database_folder )
& database = None
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
def DirectoryOfThisScript():
& return os.path.dirname( os.path.abspath( __file__ ) )
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
& if not working_directory:
&&& return list( flags )
& new_flags = []
& make_next_absolute = False
& path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
& for flag in flags:
&&& new_flag = flag
&&& if make_next_absolute:
&&&&& make_next_absolute = False
&&&&& if not flag.startswith( '/' ):
&&&&&&& new_flag = os.path.join( working_directory, flag )
&&& for path_flag in path_flags:
&&&&& if flag == path_flag:
&&&&&&& make_next_absolute = True
&&&&&&& break
&&&&& if flag.startswith( path_flag ):
&&&&&&& path = flag[ len( path_flag ): ]
&&&&&&& new_flag = path_flag &#43; os.path.join( working_directory, path )
&&&&&&& break
&&& if new_flag:
&&&&& new_flags.append( new_flag )
& return new_flags
def IsHeaderFile( filename ):
& extension = os.path.splitext( filename )[ 1 ]
& return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
def GetCompilationInfoForFile( filename ):
& if IsHeaderFile( filename ):
&&& basename = os.path.splitext( filename )[ 0 ]
&&& for extension in SOURCE_EXTENSIONS:
&&&&& replacement_file = basename &#43; extension
&&&&& if os.path.exists( replacement_file ):
&&&&&&& compilation_info = database.GetCompilationInfoForFile( replacement_file )
&&&&&&& if piler_flags_:
&&&&&&&&& return compilation_info
&&& return None
& return database.GetCompilationInfoForFile( filename )
def FlagsForFile( filename, **kwargs ):
& if database:
&&& compilation_info = GetCompilationInfoForFile( filename )
&&& if not compilation_info:
&&&&& return None
&&& final_flags = MakeRelativePathsInFlagsAbsolute(
&&&&& piler_flags_,
&&&&& piler_working_dir_ )
&&& relative_to = DirectoryOfThisScript()
&&& final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
& return {
&&& 'flags': final_flags,
&&& 'do_cache': True
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:358073次
积分:3912
积分:3912
排名:第4789名
原创:40篇
转载:48篇
评论:13条
(1)(1)(1)(8)(4)(1)(1)(1)(1)(2)(3)(5)(3)(4)(3)(1)(2)(5)(2)(1)(1)(2)(2)(1)(3)(7)(2)(1)(2)(1)(1)(4)(3)(1)(3)(5)

我要回帖

更多关于 youcompleteme 配置 的文章

 

随机推荐