vim - 让 GTK+ 标识符通过你完成我的建议显示

标签 vim gtk gtk3

我安装了 ycm,并且补全适用于 STL 和 boost,但是每当我构建 gtk 应用程序时,我都没有针对 gtk 标识符的补全建议。

我的 ycm_extra_conf.py 文件包含 gtk header 以及其他 header 的所有内容。

我想要的是当我输入时:

#include<gtk/gtk.h>
int main()
{
GtkWi // here no suggestions that begin with GtkWi (it should suggest 'GtkWindow') 
/* rest */
}

正如我所说,建议适用于 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>

最佳答案

最近几天我比以往任何时候都更多地回答自己的问题。 这是因为当没有人回答你的问题时,你没有其他办法,只能自己寻找解决方案。

我所做的工作是使标识符不仅适用于 gtk 和 C++,而且适用于任何语言和任何类型的库:

下载 exuberant-ctags 然后这是创建标签的模式:

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 变成了 super 强大的 IDE :D

关于vim - 让 GTK+ 标识符通过你完成我的建议显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541556/

相关文章:

使用 Visual Studio 2013 配置 GTK3.6.4

python - 从 GtkDialog 上的 Gtk.TreeView 激活 default_button (python/Gtk3)

vim - 如何给vim添加vimrc路径

vim - 自定义绑定(bind)将选择内容括在括号中

c - 如何使 GTK3 窗口图像可收缩?

c++ - (Gnome) 桌面通知如何工作?

python - 设置 Gtk.ComboBoxText 默认项?

vim - 如何在vim中将选定的行复制到剪贴板

python - vim:符号查找错误:/lib/x86_64-linux-gnu/libpython3.8.so.1.0: undefined symbol :XML_SetHashSalt

代码::阻止 Windows GTK 构建错误