【问题标题】:Vim Cmake integrationVim Cmake 集成
【发布时间】:2018-08-31 06:03:00
【问题描述】:

我有一个 cmake 项目。我想轻松完成以下操作

  • 搜索光标下任意变量、函数等的声明、定义和引用,可以在外部头文件中声明,其路径通过CMakeLists.txt中的INCLUDE_DIRECTORIES添加
  • 重命名项目中声明的变量、函数等

我该如何设置?

【问题讨论】:

    标签: vim cmake ctags cscope


    【解决方案1】:

    您可以尝试使用 vim 插件 cmake4vim 将 CMake 集成到 Vim。 该插件有助于使用 cmake 目标并允许生成编译数据库文件 (compile_commands.json)。很多插件使用这个文件来完成代码,跳转到定义等等(例如YCM

    您还可以使用 vim lsp 插件(例如 vim-lsp),这些插件使用语言服务器来完成代码、重构和其他好功能。

    但是CMake项目集成(cmake缓存生成、项目编译等)和搜索声明、定义等是不同的任务。不同的插件和工具可以解决这些任务。

    【讨论】:

      【解决方案2】:
      • 您可以通过在path 选项中添加条目来告诉 Vim 在哪里寻找包含。不过,我没有足够的 Cmake 经验,不知道如何从 CMakeLists.txt 中提取路径。

        :help 'path'

      • 假设正确设置了path,则可以使用内置的:dsearch 和相关命令来跨包含搜索定义。

        define 选项有一个规定名称,但它可用于查找任何特定模式,因此您可以对其进行更改以匹配声明,或其他任何内容。

        参见:help include-search:help 'define'

      • Vim 没有内置的“引用”概念。 :isearch 和朋友应该为此努力,但他们可能太吵了。

      • 重命名通常通过以下方式完成:

        :grep foo paths
        :cwindow
        :cdo s/foo/bar/gc
        

      【讨论】:

      • 它是否通过令牌重命名(所有现代 IDE 都提供)?或者它是一个愚蠢的字符串搜索/替换,它可以破坏性地篡改其他名称和部分文本?
      • @bloody,Vim 不是 IDE。它对您的代码一无所知,因此没有任何理由期望 IDE 级别的智能。也就是说,/c 标志会提示用户进行确认,因此,如果您注意自己在做什么,就不会冒险。
      • 感谢您的反馈。自从我们交流以来,我意识到:grep -w foo paths 首先更适合重命名。它不像 IDE 的重命名,但它至少不会包含来自较长名称的子字符串,可能会节省一些审查时间。肯定更接近“真正的”重命名。
      【解决方案3】:

      YouCompleteMe 会帮助你。它使用compile_database.json,可以通过cmake生成。

      此插件还提供多种语言的自动竞争功能。

      【讨论】:

      • Take the Tour ,并确保使用您的answer link 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 how to answer
      【解决方案4】:

      我在 vim 中使用函数并将它们分配给热键。

      https://developer.ibm.com/tutorials/l-vim-script-2/

      它给你更多的 IDE 感觉。但归根结底,您会获得更多控制权。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 2020-06-29
        • 1970-01-01
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多