在Vim中编译和运行代码:一站式指南

Vim是一款功能强大的文本编辑器,广泛用于程序员和开发人员中。虽然Vim主要用于文本编辑,但它也提供了一些方便的功能来编译和运行代码。本文将详细介绍如何在Vim中编译和运行代码,包括设置编译快捷键、使用插件以及集成构建系统。

1. 引言

Vim的哲学是“一个程序只做一件事情,并做好它”。尽管Vim不是一个集成开发环境(IDE),但它通过各种插件和快捷键可以扩展功能,实现编译和运行代码的目的。

2. Vim基础

在深入了解如何在Vim中编译和运行代码之前,我们需要了解一些Vim的基本操作。

  • 打开Vim:在终端中输入vim命令。
  • 插入模式:按i进入插入模式,开始编辑文本。
  • 命令模式:按Esc键退出插入模式,进入命令模式。
  • 保存文件:在命令模式下输入:w然后按Enter保存文件。
  • 退出Vim:输入:q退出Vim,如果要保存并退出,可以使用:wq

3. 编译代码

在Vim中编译代码通常需要依赖外部编译器,如gcc(C/C++)、javac(Java)等。

3.1 设置编译快捷键

你可以在Vim中设置快捷键来快速编译代码。这通过在Vim的配置文件.vimrc中添加命令实现。

" 编译当前文件的快捷键
:nnoremap <F5> :w<CR>:!gcc % -o %:r<CR>

上面的代码设置了F5键为编译当前C/C++文件的快捷键。%是Vim中代表当前文件名的通配符,:r是去除文件扩展名的版本。

3.2 使用系统编译命令

在Vim的命令模式下,你可以输入冒号:来调用系统命令。

:!gcc main.c -o main

这条命令会编译当前打开的main.c文件,并生成一个名为main的可执行文件。

4. 运行代码

编译后,你可以在Vim中直接运行生成的可执行文件。

4.1 设置运行快捷键

类似于编译快捷键,你可以设置一个运行快捷键。

:nnoremap <F6> :!./%:r<CR>

这将F6键设置为运行当前文件对应的可执行文件的快捷键。

4.2 使用系统运行命令

在命令模式下,使用感叹号!调用系统命令来运行程序。

:!./main

这条命令会运行当前目录下的main可执行文件。

5. Vim插件辅助编译和运行

Vim社区提供了许多插件来增强Vim的功能,包括编译和运行代码。

5.1 使用vim-plug安装插件

首先,你需要一个插件管理器,如vim-plug,来安装和管理插件。

" 安装vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

然后在.vimrc中配置插件:

" 配置vim-plug
call plug#begin('~/.vim/plugged')
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
call plug#end()
5.2 编译和运行相关插件

有许多插件可以帮助编译和运行代码,如vim-dispatchConque-Shell

" 安装vim-dispatch
Plug 'tpope/vim-dispatch'" 安装Conque-Shell
Plug 'Conque-Shell'

vim-dispatch允许你异步编译和运行程序,而Conque-Shell提供了在Vim内部运行终端的能力。

6. 集成构建系统

Vim可以与构建系统集成,如Makefile,来编译和运行代码。

6.1 使用Makefile

创建一个Makefile并在Vim中设置快捷键来调用make命令。

all:gcc main.c -o mainrun:./main

在Vim中设置快捷键:

:nnoremap <F7> :!make run<CR>

7. 错误处理

编译时可能会产生错误,Vim可以快速定位到错误所在的代码行。

:cn

这个命令会跳转到第一个编译错误,:cp可以向前跳转错误,:cn向后跳转。

8. 结论

虽然Vim不是一个完整的IDE,但通过设置快捷键、使用插件和集成构建系统,你可以在Vim中有效地编译和运行代码。这不仅提高了开发效率,也保持了Vim轻量级的特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试题005:面向对象的特征 之 多态性

多态的使用前提&#xff1a; 类的继承关系&#xff1a;在多态中必须存在有继承关系的子类和父类方法的重写&#xff1a;子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。当子类重写父类的方法被调用时,只有对象继承链中的最末端的方法才会被调用。向上…

C#中的异步编程:Task、Await 和 Async

public async void DoSth() {await Task.Run(() > {//...DoSth...}); } ①函数的返回类型前加上&#xff1a; async ②函数内加上&#xff1a; await Task.Run(() > { }); ③在上面{ ... } 内添加要处理的程序代码&#xff0c; 这样运行到 DoSth() 函数就…

PYTHON学习笔记(八、字符串及的使用)

目录 1、字符串 1.1、字符串的常用操作 1.2、格式化字符串 1.2.1、占位符格式化字符串 1.2.2、f-string格式化字符串 1.2.3、str.format( )格式化字符串 1.3、数据的验证 1.4、正则表达式 1.5.1元字符 1.5.2限定符 1.5.3其他字符 1.5.4re模块 1、字符串 1.1、字符…

PySimpleGUI的安装、使用介绍

PySimpleGUI的安装等介绍 如果直接使用pip命令是无法下载免费版的&#xff0c;通过设置的python Interpreter也不可以下载到5.0.0之前的版本了。 现在已经无法通过pycharm直接获取到PySimpleGUI的免费&#xff08;无需登录&#xff09;版&#xff0c;不过听说可以登入官网然后进…

C语言 写一个函数days,实现某日在本年中是第几天计算。

写一个函数days, 【定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题&#xff08;即将闰年情况包含在内&#xff09;】 由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。 ​#include <stdio.h>typedef struct {int yea…

【JS逆向课件:第十八课:JS操作2】

4.12、BOM对象&#xff08;了解&#xff09; BOM:Broswer object model,即浏览器提供我们开发者在javascript用于操作浏览器的对象。 4.12.1、window对象 窗口方法 // BOM Browser object model 浏览器对象模型// js中最大的一个对象.整个浏览器窗口出现的所有东西都是win…

十大排序的稳定性和时间复杂度

十大排序算法的稳定性和时间复杂度是数据结构和算法中的重要内容。 以下是对这些算法的稳定性和时间复杂度的详细分析&#xff1a; 稳定性 稳定性指的是排序算法在排序过程中是否能够保持相等元素的原始相对顺序。根据这个定义&#xff0c;我们可以将排序算法分为稳定排序和…

大数据|使用Apache Spark 删除指定表中的指定分区数据

文章目录 概述方法 1: 使用 Spark SQL 语句方法 2: 使用 DataFrame API方法 3: 使用 Hadoop 文件系统 API方法 4: 使用 Delta Lake使用注意事项常见相关问题及处理结论 概述 Apache Spark 是一个强大的分布式数据处理引擎&#xff0c;支持多种数据处理模式。在处理大型数据集时…

C#中的异步编程:如何有效地使用async和await关键字以提高应用程序的性能和响应性

在C#中&#xff0c;异步编程是一种处理并发操作和提高应用程序性能的重要技术。使用async和await关键字可以简化异步编程&#xff0c;并提供更清晰和可读的代码。 以下是一些有效使用async和await关键字的方法&#xff0c;以提高应用程序性能和响应性&#xff1a; 使用异步方…

【OCPP】ocpp1.6协议第5.7章节Get Composite Schedule的介绍及翻译

目录 5.7 获取组合计划Get Composite Schedule-概述 1. 目的 2. 消息类型 3. 消息格式 GetCompositeSchedule.req GetCompositeSchedule.conf 4. 使用场景 5.7 获取组合计划Get Composite Schedule-原文译文 5.7 获取组合计划Get Composite Schedule-概述 在OCPP 1.6协议中,第…

C++笔记---缺省参数和函数重载

1. 缺省参数 1.1 定义 缺省参数是声明或定义函数时为函数的参数指定一个缺省值&#xff08;默认值&#xff09;。在调用该函数时&#xff0c;如果没有指定实参 则采用该形参的缺省值&#xff0c;否则使用指定的实参&#xff0c;缺省参数分为全缺省和半缺省参数。 void Func(…

XML 和 SimpleXML 入门教程

XML 和 SimpleXML 入门教程 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它是一种自我描述的语言&#xff0c;允许用户定义自己的标签来表示数据。SimpleXML 是 PHP 中的一个扩展&#xff0c;用于解析和操作 XML 数据。本文将介绍 XML 和 …

CSDN中各种公式编辑格式记录

在CSDN博客平台码公式可太难记格式了。CSDN支持Markdown语法&#xff0c;并集成了MathJax库来渲染LaTeX公式&#xff0c;做个笔记给自己时时翻翻吧。 1. 插入行内公式 行内公式是指嵌入在文本行中的公式&#xff0c;它不会独占一行。在CSDN中使用$符号来包围LaTeX公式代码&am…

docker 安装单机版redis

把这三个放上去 修改成自己的 按照自己需求来 照图片做 vim redis.conf vim startRedis.sh mv startRedis.sh deployRedis.sh sh deployRedis.sh docker run --privilegedtrue \ --name dev.redis --restartalways \ --network dev-net \ -v ./config/redis.conf:/etc/r…

《昇思25天学习打卡营第三十三天|7月26号》

昇思25天学习打卡营 在昇思25天学习打卡营的第33天7月26号&#xff0c;我深入学习了Python编程。通过课程的系统学习和实践编程项目&#xff0c;我逐渐掌握了Python语言的基本语法和核心概念。 特别是在函数定义和数据结构的应用上&#xff0c;我学习到了一些新的东西。以为平…

鸿蒙华为登录(以及导航页面跳转)

//登录华为登录界面以及跳转 //切记一定要写路径&#xff0c;不写路径&#xff0c;容易报错&#xff0c;还有一定要记得导一下包&#xff08;Arouter&#xff09; //接下来是鸿蒙界面导航跳转 //进行跳转 TabContent组件不支持设置通用宽度属性&#xff0c;其宽度默认撑满Tab…

RedHat9 | Ansible 处理任务失败

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 1. 忽略任务失败 Ansible评估各任务的返回代码&#xff0c;从而确定任务是成功还是失败通常而言&#xff0c;当任务失败时&#xff0c;Ansible将立即在该主…

【SpringBoot】Web开发之URL映射

RequestMapping("/getDataById/{id}") public String getDataById(PathVariable("id") Long id){ return "getDataById:"id; }46 如果URL中的参数名称与方法中的参数名称一致&#xff0c;则可以简化为&#xff1a; RequestMapping("/get…

C++从入门到起飞之——友元内部类匿名对象 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、友元 2、内部类 3. 匿名对象 4、完结散花 1、友元 • 友元提供了⼀种突破类访问限定符封装的…

自定义prometheus监控获取nginx_upstream指标

1、前言 上篇文章介绍了nginx通过nginx_upstream_check_module模块实现后端健康检查&#xff0c;这篇介绍一下如何自定义prometheus监控获取nginx的upstream指标来实时监控nginx。 2、nginx_upstream_status状态 支持以下三种方式查看nginx_upstream的状态 /status?formatht…