Vim 制作GTK+;标识符通过您完成的建议显示

Vim 制作GTK+;标识符通过您完成的建议显示,vim,gtk,gtk3,Vim,Gtk,Gtk3,我安装了ycm,并且完成了STL和boost的工作,但是每当我构建gtk应用程序时,我都没有关于gtk标识符的完成建议 我的ycm_extra_conf.py文件包含gtk头和其他头的所有内容 我想要的是在键入时输入,例如: #include<gtk/gtk.h> int main() { GtkWi // here no suggestions that begin with GtkWi (it should suggest 'GtkWindow') /* rest */ }

我安装了ycm,并且完成了STL和boost的工作,但是每当我构建gtk应用程序时,我都没有关于gtk标识符的完成建议

我的ycm_extra_conf.py文件包含gtk头和其他头的所有内容

我想要的是在键入时输入,例如:

#include<gtk/gtk.h>
int main()
{
GtkWi // here no suggestions that begin with GtkWi (it should suggest 'GtkWindow') 
/* rest */
}
#包括
int main()
{
GtkWi//此处没有以GtkWi开头的建议(建议使用“GtkWindow”)
/*休息*/
}
正如我所说,建议对STL和boost有效

这是我的ycm vimrc配置:

"
" YouCompleteMe options
"

"let g:ycm_register_as_syntastic_checker = 1 "default 1
let g:Show_diagnostics_ui = 1 "default 1

let g:ycm_enable_diagnostic_signs = 0
let g:ycm_enable_diagnostic_highlighting = 1
let g:ycm_always_populate_location_list = 1 "default 0
let g:ycm_open_loclist_on_ycm_diags = 1 "default 1


let g:ycm_complete_in_strings = 1 "default 1
let g:ycm_complete_in_comments = 0 "default 0
let g:ycm_collect_identifiers_from_tags_files = 1 "default 0
let g:ycm_collect_identifiers_from_comments_and_strings = 0 "default 0
let g:ycm_cache_omnifunc = 1 "default 1
let g:ycm_use_ultisnips_completer = 1 "default 1
let g:ycm_seed_identifiers_with_syntax = 1

let g:ycm_path_to_python_interpreter = '' "default ''

let g:ycm_server_use_vim_stdout = 0 "default 0 (logging to console)
let g:ycm_server_log_level = 'info' "default info
let g:ycm_server_keep_logfiles = 0 "default 0

let g:ycm_autoclose_preview_window_after_completion = 0 "default 0
let g:ycm_autoclose_preview_window_after_insertion = 0 "default 0

"let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'  "where to search for .ycm_extra_conf.py if not found
let g:ycm_confirm_extra_conf = 1

let g:ycm_goto_buffer_command = 'same-buffer' "[ 'same-buffer', 'horizontal-split', 'vertical-split', 'new-tab' ]
let g:ycm_filetype_whitelist = { '*': 1 }

let g:ycm_key_detailed_diagnostics = '<leader>d' "default <leader>d
let g:ycm_key_invoke_completion = '<C-Space>'
let g:ycm_key_list_previous_completion = ['<S-TAB>', '<Up>']
let g:ycm_key_list_select_completion = ['<TAB>', '<Down>']


nnoremap <F11> :YcmForceCompileAndDiagnostics <CR>
”
“你完成了我的选择
"
“let g:ycm_register_as_syntastic_checker=1”默认值1
让g:Show_diagnostics_ui=1“默认值1
设g:ycm\u启用\u诊断\u符号=0
设g:ycm_启用_诊断_突出显示=1
让g:ycm\u始终\u填充\u位置\u列表=1“默认值0
设g:ycm\u open\u loclist\u on\u ycm\u diags=1“默认值1
设g:ycm_complete_in_strings=1“默认值1
让g:ycm_complete_in_comments=0“默认值0
让g:ycm_从_标记_文件收集_标识符_=1“默认值0
让g:ycm_从_注释_和_字符串中收集_标识符_=0“默认值0
设g:ycm_cache_omnifunc=1“默认值1
让g:ycm\u使用\u ultisnips\u completer=1“默认值1
设g:ycm_seed_identifiers_,语法=1
设g:ycm_path_to_python_解释器=“”“默认值”
让g:ycm_server_使用_vim_stdout=0“默认值0(登录到控制台)
设g:ycm_服务器_日志_级别='info'”默认信息
让g:ycm_server_keep_logfiles=0“默认值0
让g:ycm\u自动关闭\u预览\u窗口\u完成后=0“默认值0
让g:ycm\u自动关闭\u预览\u窗口\u插入后=0“默认值0
“设g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'”如果未找到,则在何处搜索.ycm_extra_conf.py
让g:ycm\u确认\u额外\u配置=1
设g:ycm_goto_buffer_command='same buffer'['same buffer','水平拆分','垂直拆分','新选项卡']
设g:ycm_filetype_whitelist={'*':1}
设g:ycm_key_detailed_diagnostics='d'”默认值d
让g:ycm\u key\u invoke\u completion=''
让g:ycm_键_列表_上一个_完成=['',]
让g:ycm_key_list_select_completion=['',]
nnoremap:YCMFORCCompileandDiagnostics

最近几天,我比以往任何时候都要回答自己的问题。
这是因为当没有人回答你的问题时,你别无选择,只能自己找到解决办法

这里我做的是使标识符不仅可用于GTK和C++,而且适用于任何语言和任何类型的库:

下载丰富的CTAG 下面是创建标记的shema:

Find all files:
find /root_dir -type f

Find with exclusions:
find /root_dir -type d \( -path /exclude_dir1 -path exclude_dir2 \) -prune -o -print


ctags invocation:
ctags --totals --c++-kinds=+p --fields=+ialS --languages=c++ \
--sort=foldcase --langmap=C++:.h.hpp -f file_name.tags

final invocation schema
find find-options | xargs ctags ctags-options

add to vimrc
set tags+=file_name.tags;

example:
find /usr/include/gtk-3.0 -type f | xargs ctags --totals --c++-kinds=+p \
--fields=+ialS --languages=c++ --langmap=C++:.h.hpp --sort=foldcase -f gtk-3.0.tags

example:
find /opt/boost_1_55_0/boost/asio -type f | xargs ctags --totals --c++-kinds=+p \
--fields=+ialS --languages=c++ --langmap=C++:.h.hpp --sort=foldcase -f asio.tags

example: (non-recursive)
find /opt/boost_1_55_0/boost -maxdepth 1 -type f | xargs ctags --totals --c++-kinds=+p \
--fields=+ialS --languages=c++ --langmap=C++:.h.hpp --sort=foldcase -f boost.tags

example: (depth 2 with exclusion)
find /opt/boost_1_55_0/boost -maxdepth 2 -type d \( -path /opt/boost_1_55_0/boost/typeof \) \
-prune -o -print | xargs ctags --totals --c++-kinds=+p \
--fields=+ialS --languages=c++ --langmap=C++:.h.hpp --sort=foldcase -f boost2.tags
下面是我的vimrc在创建标记并将它们放入标记目录后的样子:

212 "boost tags
213 set tags+=/home/user/dev/tags/boost/asio.tags;
214 set tags+=/home/user/dev/tags/boost/boost1.tags;
215 "set tags+=/home/user/dev/tags/boost/boost2.tags;
216 
217 "tags location
218 set tags+=/home/user/dev/tags/gtk/gtk-3.0.tags;
219 set tags+=/home/user/dev/tags/gtk/glib-2.0.tags;
220 set tags+=/home/user/dev/tags/gtk/atk-1.0.tags;
221 set tags+=/home/user/dev/tags/gtk/cairo.tags;
222 set tags+=/home/user/dev/tags/gtk/pixman-1.tags;
223 set tags+=/home/user/dev/tags/gtk/pango-1.0.tags;
224 set tags+=/home/user/dev/tags/gtk/gio-unix-2.0.tags;
225 set tags+=/home/user/dev/tags/gtk/pixbuf-2.0.tags;
226 set tags+=/home/user/dev/tags/gtk/libpng12.tags;
227 
228 "crypto tags
229 set tags+=/home/user/dev/tags/crypto/cryptopp-5.6.2.tags;
230 
231 "llvm tags
232 "set tags+=/home/user/dev/tags/llvm/llvm-3.4.2.tags;
完成后,vim将导入标签,youcompleteme引擎将使用该标签,并在您键入时向您提供建议


这些步骤将我的vim变成了超级复制功能强大的IDE:D

您没有得到语义补全的原因是,YCM只在您键入触发器(如)时触发语义补全。如果您只想使用基于标识符的语义补全,请手动按CTRL-SPACE

“这是因为当没有人回答您的问题时,您没有其他方法,只能自己找到解决方案。”不。在询问随机陌生人之前,您必须自己寻找答案。您可以简单地执行
设置标记+=/home/user/dev/tags/***.tags
。感谢您的建议,我在vimrc中分离了我的标记,这样我就可以简单地注释掉当前项目中不需要的标记。我希望谷歌能给你随机陌生人的答案,但它没有:/我发现在repo“Extra”中的Arch-Linux
ctags
安装了它“旺盛的CTAG”。