- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想为内核黑客设置 vim,所以我安装了 YouCompleteMe用于自动完成。但是,无论我做什么,看起来我都无法正确配置它。它没有正确地完成语义;它只建议当前文件中已经使用的语义,甚至不包括标题或其他翻译单元中的语义,如果这不可能,那么 ycm 就毫无用处。有谁知道如何为特定目的做这件事?如果需要包含我的 .vimrc
或 .ycm_extra_conf.py
请在评论中询问。此外,如果我需要额外的工具,请指定它们,以便我也可以进行设置。
最佳答案
请原谅我将这个死寂已久的帖子从永恒的休息中唤醒,但我一直在与同样的问题作斗争,而接受的答案并没有回答这个问题。问题是使用 YouCompleteMe 插件 设置 Vim 以进行内核和设备驱动程序开发。虽然接受的答案很有帮助,但它让我走上了错误的道路,因为我想让 YouCompleteMe 工作。
我将在下面概述我是如何解决它的,以防其他人遇到这个问题,并希望它能帮助他们。我不是任何这些技术的专家,所以它可能不是最好的方法,但我没能找到解决问题的任何其他方法。
我已经关注了 Linux Device Drivers, Third Edition我毫不怀疑,许多在这个问题上跌跌撞撞的人可能会尝试同样的事情。在第 2 章中,作者展示了一个简单的“Hello, world!”。对于设备驱动程序,我将在下面复制:
// hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void){
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
在 Vim 中打开它可能会让 YCM 提示 #include <linux/init.h>
.
显然内核编译比一般的要难一点 gcc hello.c
并且您的机器上需要有 linux 头文件。我使用 arch(顺便说一句)所以我使用 pacman -S linux-headers
得到了它们但是其他发行版应该有类似的方法来使用包管理器来获取它们。如果一切都失败了,你可以从他们的 Website 下载 Linux 内核源代码,包括头文件。 .如果你使用包管理器安装,你的 /lib/modules/$(uname -r)/build/include
中应该有头文件目录。如果您已经安装了内核源代码,则 header 位于 /path/to/source/include/
中.
此外,您还需要一个可以构建 hello.c 并将所有依赖项链接在一起的 Makefile。为此,我使用了 the Makefile for the book .但是请注意,此 Makefile 指向 /lib/modules/$(uname -r)/build
因此,如果您使用内核源代码进行构建,则必须更改此设置。此外,Makefile 将尝试构建一堆其他示例,因此您可以删除它们。 obj-m := hello.o
应该是此示例的全部内容。
如果你运行 make
此时,它应该可以编译,您可以对新创建的 hello.ko 模块进行 insmod 和 rmmod。但是你的 Vim 仍然会报错。
除此之外,首先运行 make clean
因为BEAR demands a clean directory .然后运行 bear make
它应该为您生成一个“compile_commands.json”。这就是 YCM 指南所指的内容 here .
现在如果你在 vim 中重新打开 hello.c,它应该不会再提示 init.h
了。一切都应该按预期工作。你可能会遇到 this issue尽管我已经通过将以下内容添加到我的 .vimrc 文件中解决了一堆 YCM 投诉:
let g:ycm_filter_diagnostics = {
\ "c": {
\ "regex": [
\ "-mno-fp-ret-in-387",
\ "-mpreferred-stack-boundary=3",
\ "-mskip-rax-setup",
\ "-mindirect-branch=thunk-extern",
\ "-mindirect-branch-register",
\ "-fno-allow-store-data-races",
\ "-fplugin-arg-structleak_plugin-byref-all",
\ "-fno-var-tracking-assignments",
\ "-fconserve-stack",
\ "-mrecord-mcount"
\ ]
\ }
\}
需要比我更有资格的人来解释为什么必须过滤掉这些。我对上面链接的 github 问题中的解释感到满意。但无论如何,现在您在 Vim 中应该不会再有错误或警告了,因为 YouCompleteMe 为内核和设备驱动程序开发提供了全方位的服务。
我希望这个答案能找到并帮助仍在为这个问题苦苦挣扎的任何人!
关于c - 如何为内核和设备驱动程序开发设置 YouCompleteMe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180064/
我目前有一个结构如此的项目 project | |----src/ | | | |----test.cpp | |----include/ | | | |----test.hpp |
我正在使用 YouCompleteMe 处理一些 C++ 头文件。头文件不包括查找它正在使用的所有类所需的所有其他头文件。在不修改头文件的情况下,我可以修改我的 .ycm_extra_conf.py
我想为内核黑客设置 vim,所以我安装了 YouCompleteMe用于自动完成。但是,无论我做什么,看起来我都无法正确配置它。它没有正确地完成语义;它只建议当前文件中已经使用的语义,甚至不包括标题或
我想开发C/C++程序,所以我通过Vundle安装了YouCompleteMe for Vim,但不能正常运行,实际上它只显示当前文件中包含的单词。希望得到帮助!我的步骤如下: 下载 Vundle.v
据我所知,YouCompleteMe 默认带有这个方便的预览窗口,显示 GetDoc 中的任何内容。每当您选择完成时,子命令都会返回。 然而,我目前面临的问题是,虽然它在 Python 文件上运行良好
我正在尝试配置 vim 插件“YouCompleteMe”。我的 C++ 项目由许多头文件组成,它们分布在整个目录树中。为了添加标题目录,我必须将它们添加到“.ycm_extra_conf.py”中。
我已经通过 brew 安装了 Cmake 并查看了错误跟踪器和其他有这个问题的人,但我没有找到任何有我问题的人。这是输出中的错误: Linking CXX shared library /Users/
YouCompleteMe 附带了一个附加的语法检查器。我怎样才能关掉它? 最佳答案 将以下内容放入您的 vimrc let g:ycm_show_diagnostics_ui = 0 要了解有关此选
我在我的 macvim 上安装了 ultisnips 和 youcompleteme 包。问题是 ultisnips 不起作用,因为 tab 是由 ycm 绑定(bind)的。我尝试输入 let g:
我在 ubuntu 16.04 平台上使用 vim,我发现 Youcompleteme 插件总是自动添加一些不必要的头文件。 一个简单的例子,比如我使用libtorch,torch/torch.h头文
我一直在阅读有关 VIM 的 youcompleteme 插件的内容。然而,问题是我想要一个可以转移到其他开发平台(OpenIndiana、FreeBSD、Linux 和 OS X)上的设置。 使用
我使用外部C++库(OpenFst)。我将它们添加到包含路径中,以便可以获取IntelliSense,GoToDefinition / GoToDeclaration等。 这些外部库中的一些包含代码气
这是我的 .vimrc: set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plu
我不确定这是否是某种错误(可能不是,否则每个人都会提示)并且没有谷歌帐户,我无法使用谷歌组,所以我在这里碰碰运气,希望有人有建议。 我已经使用 clang-completer 安装了 YouCompl
每当我编写 Javascript 时,YouCompleteMe 都会在 Yosemite 上的 MacVim 中收到以下错误。几乎每一行都会发生。 有人可以帮我关闭这条消息吗? 我知道我正在运行带有
我安装了 YCM 但它说: YouCompleteMe unavailable: requires Vim compiled with Python (2.6+ or 3.3+) support. 于
我刚刚通过 vundle 为 Vim 安装了 YouCompleteMe。它可以工作,但它只显示当前文件中包含的单词。我想用它来开发 c++ 程序,例如,如何配置它以显示/usr/include 中
我使用 Manjaro(5.6.7 内核),我正在尝试在 neovim 上安装 YCM。之前做过,不过是vim,用的是vundle,这次用的是vim-plug。我在启动 newvim 时收到此消息。
我使用 pyenv 创建一个 virtualenv,然后使用 pyenv local 在目录中激活它: pyenv virtaulenv 3.4.2 3.4.2-my_project pyenv
我希望能够滚动 YouComplete GetDoc在文档字符串太大而无法放入弹出窗口的情况下,使用键盘弹出。目前我用 yD 调用弹出窗口.这是我的 .vimrc 中的相关片段: nmap yd (Y
我是一名优秀的程序员,十分优秀!