【Linux】【开发环境】【RHEL】开发环境搭建系列之十一——Linux系统下搭建基于vim的C/C++ IDE开发环境

简介: 【Linux】【开发环境】【RHEL】开发环境搭建系列之十一——Linux系统下搭建基于vim的C/C++ IDE开发环境

环境


  • vim:8.2


  • RedHat:Red Hat Enterprise Linux Server release 7.7 (Maipo)


  • plug.vim


vim管理的基础


.vimrc,vim配置文件


  • Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。


  • Vim 配置文件分为系统配置文件和用户配置文件:


– 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);


– 用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。


– Vim 用户配置文件比系统配置文件的优先级高。


  • vim配置文件除了做一些全局配置外,如编码格式(fileencodings)、行号(number)等外,还可配置vim插件的情况;


.vim目录


  • vim插件安装之后,在用户目录之下的.vim文件夹之下有了相应的插件所对应的文件夹,每一个文件夹下面或者是子文件夹之下都存在一个 xxx.vim的文件;xxx.vim文件的本质就是脚本,因此在启动vim的时候会加载这些脚本文件,正是这些脚本的存在,才让我们可以自定义vim;


  • vim的插件的本质是脚本


  • Vim启动时或加载缓冲区时会遍历“runtimepath”。该设置是一组以逗号分隔的目录列表,各个目录的结构都是一致的。Vim会检查每个目录的结构,找到需要运行的脚本,并按照目录在列表中的顺序一一处理,其中就包括.vim文件夹;


  • 在我自己环境上执行的例子:


runtimepath=~/.vim,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim82,/u
sr/local/share/vim/vimfiles/after,~/.vim/after


  • vim 自身是通过在 .vim/ 目录中预定义的子目录管理所有插件;


vim插件管理机制


传统的vim plug管理方式


  • 安装:


要安装一个插件,首先要从网络上下载下来,然后解压、并放在~/.vim/下合适的目录中,如plugin、syntax、ftplugin等。


  • 升级:


经常使用的一些插件,可能需要过一段时间去vim.org上面看看有没有新的版本,如果有的话,使用和安装相同的方式来解压覆盖,从而完成更新工作。


  • 卸载:


相对于安装和更新,这个就比较麻烦了,尤其是你有太多的插件的话,你无法确定某个插件到底安装了哪些文件,最坏的情况下,你可能需要下载一个原始版本来做参考,然后从你的~/.vim/目录中把它们删除干净。


  • 多台电脑保持同步:


通常的方法是把原来的~/.vim目录做个备份,然后在需要的时候把它整个复制过去。时间长了,这会产生问题,如果两台电脑中都做了修改(分别安装了不同的插件或更新了某个插件),这时将无法准确的保持同步。


新vim插件管理方式


  • 借助第三方插件管理软件,如vim-plug、vundle等,自动维护(安装、卸载、更新等).vim目录下的不同插件;


使用vim-plug来安装管理相关插件


下载vim-plug


# 法1
cd ~/.vim/autoload || mkdir ~/.vim/autoload && cd ~/.vim/autoload &&wget plug.vim  https://github.com/junegunn/vim-plug/blob/master/plug.vim
# 法2
cd ~/.vim/autoload || mkdir ~/.vim/autoload && curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim


plug.vim中的注释,有vim-plug的用法说明,可参考:

vim~/.vim/autoload/plug.vim


在.vimrc中配置vim-plug部分


sudo vim ~/.vimrc #加入下面两行:
call plug#begin('~/.vim/plugged')
call plug#end()


.vimrc文件中配置插件(以Nerdtree为例来说明)


  • 找到对应插件的github地址,如nerdtree的为:


https://github.com/scrooloose/nerdtree


  • 在.vimrc中,call plug#begin()和call plug#end()之间加入需要安装的插件


call plug#begin('~/.vim/plugged')                       #路径对应本地安装插件的目录(目前默认会安装到~/.vim/plugged目录中),可自行修改;
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' } #NERDTreeToggle表示按需加载
call plug#end()```


scrooloose/nerdtree和github的路径是对应的,后面安装的时候,会自动到github上去下载相应插件。


使 .vimrc配置生效


通过输入以下命令重新加载:


:source ~/.vimrc


或重新加载 Vim 编辑器。


使用vim-plug安装vim插件


:PlugStatus   #查看插件状态;
:PlugInstall  #安装所有插件(如果仅需安装某个插件,后面接插件名即可);


安装之后,可以查看下.vim目录的整体布局:


[qxhgd@localhost .vim]$ tree
├── autoload
│   └── plug.vim
└── plugged
    └── nerdtree
        ├── autoload
        │   ├── nerdtree
        │   │   └── ui_glue.vim
        │   └── nerdtree.vim
        ├── CHANGELOG.md
        ├── _config.yml
        ├── doc
        │   ├── NERDTree.txt
        │   └── tags
        ├── lib
        │   └── nerdtree
        │       ├── bookmark.vim
        │       ├── creator.vim
        │       ├── event.vim
        │       ├── flag_set.vim
        │       ├── key_map.vim
        │       ├── menu_controller.vim
        │       ├── menu_item.vim
        │       ├── nerdtree.vim
        │       ├── notifier.vim
        │       ├── opener.vim
        │       ├── path.vim
        │       ├── tree_dir_node.vim
        │       ├── tree_file_node.vim
        │       └── ui.vim
        ├── LICENCE
        ├── nerdtree_plugin
        │   ├── exec_menuitem.vim
        │   ├── fs_menu.vim
        │   └── vcs.vim
        ├── plugin
        │   └── NERD_tree.vim
        ├── README.markdown
        ├── screenshot.png
        └── syntax
            └── nerdtree.vim
11 directories, 29 files


使用vim-plug卸载vim插件


  • 在.vimrc注掉或删除之前注册应插件的plug 命令;


  • 运行:source ~/.vimrc 或重启 Vim 编辑器;


  • 执行:PlugClean即可;


使用vim-plug更新vim插件


  • 执行:PlugUpdate即可(如果需要更新某个插件,后面接插件名即可);


操作/使用vim插件的几种方式


  • vimrc中注册插件时候的配置插件的选项:


Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' } #NERDTreeToggle表示按需加载


  • 在vimrc文件中增加配某插件相关的配置


" NERDTree
map <C-n> :NERDTreeToggle<CR>
" map 是快捷键映射命令
" <C-n> 定义了快捷键,表示 Ctrl-n
"后面是对应的命令以及回车键<CR>


  • 在vim中直接输入插件相关命令


命令 说明
:NERDTree 打开目录树
:NERDTreeClose 关闭目录树
:NERDTreeToggle 打开/关闭目录树
:NERDTreeFind 打开目录树并定位到当前文件


  • 快捷键


和编辑文件一样,通过h j k l移动光标定位
打开关闭文件或者目录,如果是文件的话,光标出现在打开的文件中
go 效果同上,不过光标保持在文件目录里,类似预览文件内容的功能
i和s可以水平分割或纵向分割窗口打开文件,前面加g类似go的功能
t 在标签页中打开
T 在后台标签页中打开
p 到上层目录
P 到根目录
K 到同目录第一个节点
J 到同目录最后一个节点
m 显示文件系统菜单(添加、删除、移动操作)
? 帮助
q 关闭


相关管理插件/插件汇总


vim管理插件发展史


2006年3月- 2014年7月:Vimball(分发格式和关联的Vim命令)


2008年10月- 2015年12月:Pathogen(由于原生vim包被弃用)


2009年8月- 2009年12月:Vimana


2009年12月- 2014年12月:VAM


2010年8月 - 2010年12月:Jolt


2010年10月 - 2012年12月:tplugin


2010年10月 - 2014年2月:Vundle(在NeoBundle破解代码后停止使用)


2012年3月 - 2018年3月:vim-flavor


2012年4月 - 2016年3月:NeoBundle(被弃用,建议使用dein)


2013年1月 - 2017年8月:infect


2013年2月 - 2016年8月:vimogen


2013年10月 - 2015年1月:vim-unbundle


2013年12月 - 2015年7月:Vizardry


2014年2月 - 2018年10月:vim-plug


2015年1月 - 2015年10月:enabler


2015年8月 - 2016年4月:Vizardry 2


2016年1月 - 2018年6月:dein.vim


2016 年 12 月-至今,spacevim


2016年9月 - 至今:原生Vim 8


2017年2月 - 2018年9月:minpac


2018年3月 - 2018年3月:autopac


2017年2月 - 2018年6月:pack


2017年3月 - 2017年9月:vim-pck


2017年9月 - 2017年9月:vim8-pack


2017年9月 - 2019年5月:volt


2018年9月 - 2019年2月:vim-packager


2019年2月 - 2019年2月:plugpac.vim


常用插件


智能补全类


  • YouCompleteMe,大名鼎鼎的YCM,它是⼀个快速、即输即查、模糊搜索的Vim代码完成引擎。它实际上有好⼏个完成引擎组成:


  • deoplete.nvim,是一款自动补全的引擎,具体对某种编程语言的自动补全支持,要安装对应的source 才能真正工作;


  • coc.nvim,其本身并不具备代码补全功能,要想完成代码补全,还需安装其他相应语言的 LSP 插件。因此 coc.nvim其实是一个能加载其他插件的 Vim 插件;


neocomplete,为 vim 提供智能提示功能,将 vim 改造成强大的IDE;


  • nerdcommenter,Vim 下高效率添加注释(或取消注释)的插件;


文件管理类


  • nerdtree,列出当前路径的目录树,一般IDE都是有的。可以方便的浏览项目的总体的目录结构和创建删除重命名文件或文件名;


  • winmanager是vim下管理窗口的插件,整合了nerdtree和taglist,可以管理文件浏览器、缓冲区、taglist等窗口;


符号及跳转类


  • CTAGS,扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来,有Universal Ctags,Exuberant-ctags等;


  • GTAGS(GNU GLOBAL)是一套源代码标记系统,使用它可以定位数据结构,函数,宏等等,并且可以方便地跳转;


  • CSCOPE是类似于ctags一样的工具,但可以认为它是ctags的增强版,因为它比ctags能够做更多的事,还可以用来代码查找和定位代码。GTAGS和 CSCOPE、CTAGS功能有部分重叠的地方,一般使用CTAGES/GTAGS生成代码符号数据库,使用CSCOPE命令来实现快捷地跳转;


  • taglist,支持taglist窗口,从中可以看到在c文件中定义的所有tag,如宏、定义、变量、函数等;也可以双击某个tag,跳到该tag定义的位置;还可以把某一类的tag折叠起来;


代码搜索类


  • RP(rip grep):增强grep来实现文本搜索的工具,特点就是速度非常快;


  • Fzf(fuzzy finder):模糊查找的工具,其优点是用户可以不用记住精确的信息就可以查到对应的代码;


  • ctrlp是一款支持对文件、缓冲区( :CtrlPBuffer )、MRU(Most Recently Used)文件( :CtrlPMRU )和标签进行模糊搜索/查找的Vim插件;


实际应用时,可根据需要自由组合,如

Vim+Cscope+Gtags+YouCompleteMe+Rg+Fzf这种。


vim相关命令


vim安装相关


# 0-查看vim版本: 
vim --version | head -n 1
#1 vim的升级
# 1.1 从源码升级vim版本: 
yum install ncurses-devel
wget https://github.com/vim/vim/archive/master.zip
unzip master.zip
cd vim-master
cd src/
./configure
make
sudo make install
vim
vim --version # 查看当前版本
# 1.2 yum升级vim版本到最新:
sudo yum update -y vim* #实验证明无法升到vim8


vim环境相关操作


  • vim环境的命令


:scriptnames       #查看vim加载时加载了那些插件 
:set all           #查看环境配置参数
:set runtimepath   #查看运行时加载的搜索路径
:options           #vimrc设置的全部选项


  • vim插件的runtimepath的内容说明


~/.vim    #主目录,保存个人偏好的文件。
/usr/local/share/vim/vimfiles3   #系统范围的Vim目录,保存由系统管理员决定的文件。
/usr/local/share/vim/vim82     #即$VIMRUNTIME,保存与Vim一起分发的文件。
/usr/local/share/vim/vimfiles/after #系统范围Vim目录中的“after”目录。系统管理员可以利用该目录来覆盖默认设置,或添加新的设置。
~/.vim/after #主目录中的“after”目录。可以利用该目录用个人偏好覆盖默认设置或系统设置,或添加新的设置。


vim-plug相关命令


:PlugStatus   #查看插件状态;
:PlugInstall  #安装插件;
:PlugUpdate   #更新插件;
:PlugClean    #删除插件,之前配合vimrc注掉或删除对应plug 命令。然后,运行:source ~/.vimrc 或重启 Vim 编辑器,最后执行PlugClean即可;
:PlugUpgrade #升级vim-plug本身


参考资料














相关文章
|
6月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
588 3
Linux系统禁用swap
|
6月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1115 3
|
5月前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
402 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
696 3
Linux系统初始化脚本
|
6月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
770 1
|
6月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1224 1
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
11月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
447 12
|
9月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
244 0
|
9月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
382 0

热门文章

最新文章