3

我使用 vim 进行 C++ 代码编辑。但是它的代码补全不是很好(虽然我试过很多插件,比如OmniCppComplete)。Qt Creator 代码补全很棒,而且它还有 vim 风格的编辑功能,对我来说已经足够完整了。唯一对我不利的是,我不能在 Qt Creator 中使用 ctags 功能(尽管 Qt Creator 具有转到类定义的功能,但解析源代码需要更多时间)。

是否可以在伪 vim 模式下创建源代码标记文件并在 Qt Creator 中使用它?

4

1 回答 1

5

Vim 中的 C++ 代码完成实际上更胜一筹。我将概述您必须采取的步骤才能使其正常工作。但是,我不会在这里详细介绍(例如构建庞大的开源代码库、克隆存储库、为 Vim 安装插件等),因为否则值得为新手编写一个大型教程。因此,假设您是一个非常了解和准备充分的软件开发人员,那么您将获得一个流利的指南:

  1. 获取并安装clang_complete(Vim 插件);

  2. 获取并安装neocomplcache(Vim 插件);

  3. 如果您在 Unix 上,那么您很幸运,因为您可能已经在系统上安装了LLVMClang,或者您必须使用包管理器并使用单个命令安装它们。如果是这样,那么您可以立即跳到最后一步(#7)。

    如果你在 Windows 上,那么你就没有那么幸运了,但从实际的角度来看,这实际上更好 - 你将拥有自己构建巨大的东西并让事情无论如何都能正常工作的丰富经验。:)

    所以,如果你在 Windows 上(我可以看到使用 Qt Creator),那么你可能已经在你的系统上安装了 MinGW。如果不是这种情况,那么我强烈建议您安装最新的MinGW-w64。幸运的是,您不必自己编译它,因为rubenvb已经在两种变体中构建了 MinGW-w64 工具链:针对 64 位 Windows(又名 x64)针对 32 位 Windows(又名 x86)。只需根据您的操作系统下载一个。注意:这些链接指向 MinGW-w64 的最新(在撰写此答案时)稳定版本,即基于 GCC 4.7.2。重要提示:确保 MinGW-w64 在%PATH%环境变量中。

  4. 另一个需要的软件是CMake(一种流行的构建系统)。同样,如果您在 Unix 上,它可能已经安装。如果您使用的是 Windows,则只需下载并安装它。重要提示:确保 CMake 在%PATH%环境变量中。

  5. 我们需要的最后一件事是Python。再一次,如果您在 Unix 上,那么它已经安装在您的系统上。否则,你已经知道该怎么做了。:) 官方有 2 个 Python 版本:2.7.3 和 3.xx - 你绝对应该下载并安装这两个版本。Python 是任何开发人员机器上必不可少的软件。重要提示:确保 Python 2.7.3(不是 3.xx!)在%PATH%环境变量中。

  6. 现在我们已经安装了 MinGW-w64、CMake、Python,我们已经准备好构建 LLVM 和 Clang。为了减轻痛苦,请转到我的Out-of-Source Builders项目并向下滚动到Guide: Build 64-bit LLVM and Clang for Windows (64-bit) Using MinGW-w64。如果你使用的是 32 位 Windows,请不要注意标题中的64 位(没关系),只需按照那里的说明进行操作即可。等待大约一个小时,直到 LLVM 和 Clang 构建完成。

  7. 我们差不多完成了,剩下的就是正确配置 Vim。在这里,我将简单地提供最有可能满足您需求的配置。

配置neocomplcache


let g:neocomplcache_enable_at_startup            = 1
let g:neocomplcache_enable_smart_case            = 1
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion   = 1
let g:neocomplcache_min_syntax_length            = 2

if !exists('g:neocomplcache_force_omni_patterns')
  let g:neocomplcache_force_omni_patterns = {}
endif

let g:neocomplcache_force_overwrite_completefunc = 1

let g:neocomplcache_force_omni_patterns.c      = '[^.[:digit:] *\t]\%(\.\|->\)'
let g:neocomplcache_force_omni_patterns.cpp    = '[^.[:digit:] *\t]\%(\.\|->\)'
    \ . '\|\h\w*::'
let g:neocomplcache_force_omni_patterns.objc   = '[^.[:digit:] *\t]\%(\.\|->\)'
    \ . '\|\h\w*::'
let g:neocomplcache_force_omni_patterns.objcpp = '[^.[:digit:] *\t]\%(\.\|->\)'
    \ . '\|\h\w*::'

inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"

配置clang_complete


let g:clang_use_library      = 1
let g:clang_auto_select      = 0
let g:clang_complete_auto    = 0
let g:clang_complete_copen   = 1
let g:clang_complete_macros  = 1
let g:clang_complete_patters = 1

let g:clang_library_path = 'D:/Toolchains/x64/LLVM/3.3/bin'

let g:clang_auto_user_options = 'path, .clang_complete'

有关这两个插件的更多信息,请使用 Vim 的帮助文档::h clang_complete:h neocomplcache. 有很多选项可以调整,尤其是在neocomplcache. 从我的角度来看,这两个插件对于任何使用 Vim 的 C++ 开发人员来说都是必须的。

注意:如果您不知道如何完成此处列出的某些步骤,您将不得不在 StackOverflow 上提出其他问题或在其他地方查看此答案开头所述的原因。

我希望这会有所帮助,并且从现在开始,您会在开发工作中更加青睐 Vim。:)

于 2013-03-17T09:07:30.930 回答