Windows配置vim编辑器写C++

Windows配置vim编辑器写C++

前言

我是一个非常喜欢vim的人,于是我想要在windows下实现vim编辑器

 

 

 

 

 


下面的内容主要参考:

https://blog.csdn.net/l815453541/article/details/103574640?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control

https://www.linuxprobe.com/how-using-vim.html

https://vim.fandom.com/wiki/C%2B%2B_code_completion

 

 

所需文件介绍

1.编译器:MinGW
什么是MinGW-64?我也不清楚,只能贴过来一篇文章,c++有很多编译器,其他不做介绍。
2. 编辑器:vim

MinGW-64安装过程

MinGW-64,进入网址后点击Files,文件在该目录下:Toolchains targetting Win64–>Personal Builds–>mingw-builds–>8.1.0–>threads-posix–>seh
这里下载的是64位、seh异常处理机制、POSIX线程的gcc包。

把下载好的x86_64-8.1.0-release-posix-seh-rt_v6-rev0解压,得到文件夹mingw64,然后把mingw64随便放到一个目录下,把mingw64目录下的bin添加环境变量即可。

测试是否安装完成,在命令行输入gcc -v,可以看到版本信息

这样,我们就将一个编译环境搭建好了,

helloword程序测试,将这段代码写入hello.cpp文件中,把hello.cpp放到桌面,用g++命令编译,生成a.exe文件,执行a.exe输出”HELLO WORLD”。注意了,编译的时候不能使用gcc命令,虽然gcc命令可以编译c++源码,但是它不能自动链接c++的函数库。

#include<iostream>
using namespace std;
int main()
{
 cout<<"HELLO WORLD"<<endl;
 return 0;
}

vim安装以及配置

编译环境弄好,下一步就是编辑环境了,我们来安装vim

vim官网,进入网址后点击Download再点击PC: MS-DOS and MS-Windows,再点击gvim82.exe(ftp)完成下载

程序安装:点开gvim82.exe一直下一步就好。安装完成后会生成一系列的vim编辑器
环境变量配置:和上面MinGW-64配置环境变量一样,把vim目录下的vim82添加到环境变量path中,然后确定。

 


MinGW的使用

MinGW(Minamalist GNU For Windows)是个精简的C/C++编译器,它实际上是将经典的开源C语言编译器GCC移植到了Windows下,并且包含了Win32API,因此可以将源代码编译生成Windows下的可执行程序。

一句话来概括,MinGW是GCC的Windows版本

对cpp文件的编译与运行

我们来写一段C/C++代码

#include<stdio.h>       
int main(void){    
       printf("请输入一个数字,我们将判断其奇偶"); 
       int val;  //用于存储数字   
       scanf("%d",&val);                         
       if(val%2==1){            
            printf("这是一个奇数\n");          
       }else{          
            printf("这是一个偶数\n");   
       }         
       return 0;  
} 

这是一个简单的判断奇数偶数的一段程序,下面,我们来将其保存在某cpp文件中。

首先我们需要有一些理论知识,关于一个C/C++文件被运行的步骤

C/C++文件变成可执行文件(即日常所说“编译过程”)需要四个步骤:

  • 预编译:预处理主要处理源文件中的“#include”、“#define”等预处理命令,最后将这些数据输出到一个“.i”的文件中
    预处理主要完成的工作有:
    (1)删除#define,展开宏;
    (2)处理条件编译指令,预处理程序先判断条件,在根据条件修改源代码;
    (3)删除注释;
    (4)添加行号,以及文件名标识,便于调试
    (5)删除“#include”,插入相应的头文件;
  • 编译:将C/C++文件,例如刚才的.i文件翻译成汇编语言的文件,将结果数据输出到“.s”的文件中
  • 汇编:将刚才的汇编代码翻译成符合一定格式的机器代码,将结果输出到“.o、.obj”的文件中
  • 链接:链接就是将上一步生成的obj文件和系统的obj文件、库文件链接起来,最终生成可以在特定平台执行的可执行文件

而我们的MinGW所对应的命令就是

  • 预编译:g++ -E test.cpp -o test.i
  • 编译:g++ -S test.i -o test.s
  • 汇编:g++ -c test.s -o test.o
  • 链接:g++ test.o -o test.exe

我们可以直接使用g++ test.cpp -o test 来生成可执行程序,不过建议一步步来,这样也能更熟悉C++的编译过程。

GDB调试工具

下面我们来介绍一些MinGW下的一个调试工具——GDB。

要支持调试,在编译时要加入-g选项,编译命令

gcc -g test.cpp -o test.exe

然后,我们就可以加载调试文件:

gdb test.exe

调试常用命令:

 

命令解释简写
file加载一个可执行文件,也可以在运行gdb的时候加载,两种方法都不会运行程序。
list列出可执行源码的一部分,通常在程序开始运行前执行,用来设置断点。l
next单步调试,不进入函数。n
step单步执行,进入函数。s
run运行加载了的程序。r
continue继续执行程序。c
quit退出调试。q
printf输出指定的变量的值,变量要在程序运行处可见。p
break设置断点。b
info break查看断点的信息。i b
delete删除断点。d
watch监视一个变量的值,一旦发生变化,程序将会被暂停执行。wa
help查看gdb的帮助信息。h
help查看gdb的帮助信息。h

我们通过 break  n(n是一个数字) 来设置断点

关于GDB的具体操作请看这里——https://www.cnblogs.com/ggg-327931457/p/9765774.html

 

 


Vim基本操作

三种基本模式

(1)一般模式:进入vi的默认模式,能够进行复制、黏贴、删除等操作;
(2)编辑模式:从一般模式按下‘i’即可进入;
(3)命令行模式:从一般模式按下“:”、'?'、'/'即可进入;

一般模式 常用按键

“一般模式”的常用按键按键含义
h向左
J向下
K向上
l向右
20h向左20个字符
20j向下20行
20k向上20行
20l向右20个字符
Page Up向上翻页
Page Down向下翻页
Home光标移到当前行的最左端
End光标移到当前航的最右端
n [空格]光标向右移动n个字符
N[Enter]光标向下N行
G光标移到最后一行
nG光标移动到第n行
gg或1G光标移动到第一行
/word向下查找word
?word向上查找word
n如果是/word后使用,则表示向下继续查找;
如果是?word后使用,则表示向上继续查找;
N如果是/word后使用,则表示向上继续查找;
如果是?word后使用,则表示向下继续查找;
:n,m/old/new/g从第n行到第m行中,将old替换为new
:n,$s/old/new/g从第n行到最后一行中,将old替换为new
u类似windows中的CTRL+Z,前一步
x向后删除一个字符
X向前删除一个字符
3x向后删除3个字符
3X向前删除3个字符
dd删除当前行
3dd删除当前行开始的3行
yy复制当前行
3yy复制当前行开始的3行
p黏贴到当前光标的下一行
P黏贴到当前光标的上一行
CTRL+r重做前一个操作

命令行模式 常用按键

“命令行模式”的常用按键按键含义
:w保存
:q退出vim
:wq保存并退出
:wq!(在可以转换权限的情况下)强制保存并退出
:q!直接退出不保存
:w filename另存为filename
:n,m w filename将第n行到第m行另存为filename
:set nu显示行号
:set nonu不显示行号
:! command暂时离开vim,并执行command,执行完后再进入vim
:r filename将filename文件的数据读入当前文件
:set all显示当前vim的环境配置
:term打开一个终端

可视区块功能

Visual Block功能可以用于块复制。

在一般模式下可以进行可视区块操作:

CTRL+v:开始复制块; 
y:复制块; 
p:黏贴块; 
d:删除块

同时编辑多个文件

多文件编辑的好处是能够将一个文件的某些内容yy后,p到另一个文件中。
vim file1 file2 即可同时编辑两个文件,但是屏幕中同时只会出现一个文件内容,需要进行切换。

在命令行模式下:

:n:向下切换;
:N:向上切换;
:files:列出当前编辑的所有文件;

多窗口编辑

如下图:一个界面能够显示多个文件内容

:sp:打开当前文件;
:sp filename:打开filename文件;
CTRL+w+↓:光标切换到下一个窗口;
CTRL+w+↑:光标切换到上一个窗口;
:q:关闭光标所在的窗口;

 


升级Vim

下载好了vim,下面我们要来配置一些插件

安装Vundle

首先我们需要安装一个插件管理器——Vundle。

通过下面的命令将Vundle安装到vim目录下的vim82/bundle/Vundle.vim目录下

git clone https://github.com/VundleVim/Vundle.vim.git vim82/bundle/Vundle.vim

你的电脑需要基本配置git

添加一个gvim目录的 环境变量 $VIM ,步骤 :我的电脑->属性->高级系统设置->高级->环境变量->新建 ;如图

打开_vimrc,加入如下配置

"vundle start
set nocompatible              " be iMproved, required
filetype off                  " required

" 将Vundle插件的目录添加到gvim的运行时变量中
set rtp+=$VIM/vim82/bundle/Vundle.vim/
call vundle#begin('$VIM/vim82/bundle/')
" All of your Plugins must be added before the following line
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/nerdtree'
call vundle#end()               " required
filetype plugin indent on       " required
"vundle end

需要安装插件时只要在vundle#begin下面写插件就可以了

卸载插件

  • 编辑.vimrc文件移除的你要移除的插件所对应的plugin那一行。
  • 保存退出当前的vim
  • 重新打开vim,输入命令BundleClean。

 

配置编译环境

在你的_vimrc文件中配置编译调试选项。

"编译环境
func CompileRun()
	exec "w"
	"C程序
	if &filetype == 'c'
		exec "!gcc -Wall -enable-auto-import % -g -o %<.exe"
	"c++程序
	elseif &filetype == 'cpp'
		exec "!g++ -Wall -enable-auto-import  % -g -o %<.exe"
	"Java程序
	elseif &filetype == 'java'
		exec "!javac %"
	endif
endfunc
"结束定义CompileRun

"定义Run函数
func Run()
	if &filetype == 'c' || &filetype == 'cpp'
		exec "!%<.exe"
	elseif &filetype == 'java'
		exec "!java %<"
	endif
endfunc

"定义Debug函数,用来调试程序
func Debug()
	exec "w"
	"C程序
	if &filetype == 'c'
		exec "!gcc % -g -o %<.exe"
		exec "!gdb %<.exe"
		elseif &filetype == 'cpp'
		exec "!g++ % -g -o %<.exe"
		exec "!gdb %<.exe"
	"Java程序
	elseif &filetype == 'java'
		exec "!javac %"
		exec "!jdb %<"
	endif
endfunc
"结束定义Debug
"设置程序的运行和调试的快捷键F5和Ctrl-F5
map <F5> :call CompileRun()<CR>
map <F6> :call Run()<CR>
map <C-F5> :call Debug()<CR>

 

可能遇到的问题:
编译的时候可能会出现:
Info: resolving std::cout by linking to __imp___ZSt4cout (auto-import)
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a
uto-importing has been activated without –enable-auto-import specified on the c
ommand line.
This should work unless it involves constant data structures referencing symbols
from auto-imported DLLs.)
在编译命令中加入 -enable-auto-import

 

 

安装nerdtree

下面我们来安装第一个插件——nerdtree,上面的配置文件中已经写了:

Plugin 'scrooloose/nerdtree'

下面在我们的Vim命令行下执行:

:PluginInstall

在_vimrc文件中添加对应的配置就可以使用了

"autocmd vimenter * NERDTree
map <F2> :NERDTreeToggle<CR>
"nerdtree end

关于这个目录管理工具的一些操作帮助:

进入当前目录的树形界面,通过小键盘”上下”键,能移动选中的目录或文件。目录前面有”+”号,按Enter会展开目录,文件前面是”-“号,按Enter会在右侧窗口展现该文件的内容,并光标的焦点focus右侧。”ctr+w+h”光标focus左侧树形目录,”ctrl+w+l”光标focus右侧文件显示窗口。多次按”ctrl+w”,光标自动在左右侧窗口切换。光标focus左侧树形窗口,按”?”弹出NERDTree的帮助,再次按”?”关闭帮助显示。输入”:q”回车,关闭光标所在窗口。

NERDTree提供了丰富的键盘操作方式来浏览和打开文件,介绍一些常用的快捷键:

  • 和编辑文件一样,通过h j k l移动光标定位

  • 打开关闭文件或者目录,如果是文件的话,光标出现在打开的文件中

  • go 效果同上,不过光标保持在文件目录里,类似预览文件内容的功能

  • i和s可以水平分割或纵向分割窗口打开文件,前面加g类似go的功能

  • t 在标签页中打开

  • T 在后台标签页中打开

  • p 到上层目录

  • P 到根目录

  • K 到同目录第一个节点

  • J 到同目录最后一个节点

  • r : 刷新当前目录
  • R : 刷新当前根目录(这个在新加入文件后会用到)
  • m 显示文件系统菜单(添加、删除、移动操作)

  • ? 帮助

  • q 关闭

 

CTags和OmniComplete代码补全

OmniComplete 并不是插件的名字,而是 Vim 众多补全方式中的一种(全能补全)。说白了 OmniComplete 其实就是根据光标前的内容猜测光标后的内容,具体怎么猜取决于所采用的脚本。

而 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本。

那么经常和 OmniCppComplete 一起出没的 Ctags 又是什么呢?Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点关系都没有)。它可以为各种语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 来说,就是把源代码中的各种宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。

OmniCppComplete 脚本就是根据 Ctags 生成的索引文件进行补全的。

安装CTags

  1. 从官网下载 Ctags 可执行文件,网站是 http://ctags.sourceforge.net/
  2. 将下载到的文件解压到一个目录,例如 D:/ctags
  3. 将该目录加入环境变量 PATH

准备索引文件

以生成 C++ 标准库索引文件为例,我们来创造 stdc++标签:

  1. 创造一个目录,例如%VIM%\vim82\tags,来存放我们一会需要的标签
  2. 下载并且解压标准库文件到%VIM%\vim82\tags
  3.  进行tags目录下执行下列命令:
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp cpp_src

–c++-kinds=+p : 为标签添加函数原型(prototype)信息
–fields=+iaS : 为标签添加继承信息(inheritance),访问控制(access)信息,函数特征(function Signature,如参数表或原型等)
–extra=+q : 为类成员标签添加类标识

基本步骤到这里就结束了,我们在tags目录下生成了一个cpp文件

安装 OmniCppComplete

  1. 在vundle中添加
    Plugin 'thinktainer/omnicppcomplete'
  2. 在vim中使用PluginInstall安装
  3. 在 vimrc 文件中加入
filetype on

" configure tags - add additional tags here or comment out not-used ones
set tags+=E:\gVim\gvim\Vim\vim82\tags\cpp

" build tags of your own project with Ctrl-F12
map <C-F12> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot=1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview

另外,还需确认在 vimrc 中开启了 filetype 选项,不然 OmniComplete 无法自动识别 C/C++ 文件类型进行补全。

这样,在插入模式编辑 C/C++ 源文件时按下 . 或 -> 或 ::,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。

 

不出意外,在这里就可以实现补全了,老实说,这里困了我一下午,网上很多下载OminicppComplete的方法是过时的,原来在vundle中写一句话就可以,甚至峰回路转。

也许你也已经注意到了一个问题,那就是「自动补全窗口的配色非常之丑」,Vim 自带的几个配色方案中只有两三种配色改掉了自动补全窗口丑陋的紫色,其它的基本上都是很逆天的用灰色表示当前选中项、紫色表示其他项。

要改变自动补全窗口的配色可以在 vimrc 中加上:

highlight Pmenu    guibg=darkgrey  guifg=black
highlight PmenuSel guibg=lightgrey guifg=black

Pmenu 是所有项的配色,PmenuSel 是选中项的配色,guibg 和 guifg 分别对应背景色和前景色。

效果在gVim中才能看!

 

安装auto-pairs

这个插件是一个帮助自动补全括号的插件

在vundle中添加:

Plugin 'jiangmiao/auto-pairs'

然后PluginInstall

补全规则1:逗号后补全空格。例如,输入:',',输出:', '
let g:AutoPairs = {',':' ','(':')', '[':']', '{':'\}',"'":"'",'"':'"', "`":"`", '```':'```', '"""':'"""', "'''":"'''"} 

 

其他小插件

还有一些小插件:

Yggdroot/indentLine ——代码缩进标识

https://github.com/Yggdroot/indentLine
Vundle管理:Plugin 'Yggdroot/indentLine'
.vimrc配置:

" 设置对齐线开/关快捷键
nmap <leader>il :IndentLinesToggle<CR>
" 设置Gvim的对齐线样式
let g:indentLine_char = "┊"
let g:indentLine_first_char = "┊"
" 设置对齐线默认开1/关0状态
let g:indentLine_enabled = 1
" 设置 GUI 对齐线颜色,如果不喜欢可以将其注释掉采用默认颜色
" let g:indentLine_color_gui = '#A4E57E'
" 设置终端对齐线颜色,如果不喜欢可以将其注释掉采用默认颜色
" let g:indentLine_color_term = 239

Mark–Karkat ——高亮关键字

https://github.com/vim-scripts/Mark–Karkat
vundle管理:Plugin 'Mark--Karkat'
.vimrc配置:插件内置,无需配置
使用方法:
<leader>m 高亮/取消选中的单词
<leader>n 取消高亮的所有单词
<leader>/ 查找高亮的所有单词

装饰主题

tender

Plugin 'jacoborus/tender.vim'

https://github.com/jacoborus/tender.vim#screenshots

let g:lightline = { 'colorscheme': 'tender' }

 

 

 


 

基本的搭建就是这样,后面就靠各位自己来玩出花儿了。

 

 

 

 

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用于windows下面的vim编辑器。 给喜欢vim的人使用。详细如下: 好吧,详细点,这里出一些基本的命令: 【什么是vi】 vi就是linux命令行下的最著名的编辑器之一,(编辑器就是类似windows记事本的功能,不过vi功能比记事本强大无限倍!^_^),现在实际使用的都是vim,它是vi的改进版本,所以现在的vi基本上就是vim了。 【vi能做什么】 第一个功能不用多说,vi可以编辑文本文件。至于其他的功能,多得无法列举,我只说我所知的一些典型的功能应用: (1)编辑文本文件 (2)方便地阅读程序源代码 (3)当文件目录浏览器来用 (4)提供编程、调试环境 (5)利用vi执行一些脚本文件(vi有自己的脚本文件语法) (x)等等等等...... 【vi的操作模式】   vi具有两种基本模式,为输入模式(或插入模式、编辑模式)和指令模式(或命令模式)。输入模式下输入字符,文本就会显示在屏幕上;而指令模式下输入字符就解释为一个输入命令并执行,而不会显示相应的字符。理解指令模式最简单方式就是想象平时剪切、复制以及粘贴数据时所发生的情况。 使用[Esc]键可以停止当前操作(插入或者命令)重新回到指令模式,准备接受新的指令。如果本来就在指令模式下面,将会响铃一下。 【最基本的使用】 这里提供了使用vi得最基本的操作,能够实现大多数的编辑目的。如果你肯花几分钟把“最基本的使用”的内容都实践一下,那么你至少可以独立地在vim中朝你想要得方向“前进”了。如果你不想学习,那么就把它当作一个“字典”吧。 *用vi打开一个文件: 输入“vi filename”. 这里,filename就是你要打开的文件的名字,默认打开文件后vi处于指令模式。 *进入编辑模式编辑打开的文件: 输入“i”. 或输入“a”. 进入编辑模式后,你可以直接敲入想要输入的字符到文件,两者的区别是i在当前字符前面开始插入,a在当前字符后面开始插入。 *退出编辑模式: 输入“[Esc]”. 这样,将返回指令模式,准备接收你要传达给vi的指令并执行,如果之前已经在指令模式下,那么系统将响铃提醒一下。 **以下命令都是在命令模式下进行: *撤销修改: 输入“u”. 这里,相比以前的vi来说,vim支持多步撤销。 *恢复修改: 输入“[Ctrl]r”. 这里,和撤销命令相反,是撤销的撤销,也可多步。 *复制行到剪切板: 输入“yy”. *复制选定内容到剪切板: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“y”。 这里,开始输入v使vi临时进入了一个"选择模式",输入方向键可以选择,输入y将选择的内容复制剪切板。 *删除行: 输入“dd”. 注意,vi的删除等价于剪切,删除的内容会保存到剪切板中。 *删除选定内容: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“d”。 这里,开始输入v使vi临时进入了一个“选择模式”,输入方向键可以选择,输入d将选择的内容删除。 *粘贴: 输入“p”. 这样会将剪切板的内容粘贴到光标位置或者光标下一行。 *查找字符并定位到第一个匹配处: 输入“/character”. 这里character是待查找的字符,只要先输入/,再输入待查字符,最后回车即可定位到第一个匹配的字符处。 *定位到匹配查找的下一个字符处: 输入“n”. *定位到匹配查找的上一个字符处: 输入“N”. *保存文件: 输入“:w”. 注意w前面的':',输入':'之后,vim会将':'之后的输入解释为待执行的指令。 *退出: 输入“:q”. 这里,如果文件没有保存,将提示无法退出,除非你强制退出,不保存文件,或者保存退出。 *强制退出: 输入“:q!”. *保存退出: 输入“:wq”. 或输入“ZZ”. *察看帮助 输入":help". ** 另外还有一个简易的教程: 输入命令:vimtutor.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻舟在过

您的支持是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值