当前位置: 首页 > news >正文

Linux Vim教程(十二):语法高亮与代码折叠

目录

1. 语法高亮

1.1 启用语法高亮

1.2 设置配色方案

1.3 自定义语法高亮

2. 代码折叠

2.1 启用代码折叠

2.2 设置折叠方法

2.3 手动折叠

2.4 基于缩进的折叠

2.5 基于语法的折叠

3. 案例

3.1 配置文件

3.2 编辑Python文件

3.3 使用折叠功能

4. 高级使用技巧

4.1 自动命令

4.2 自定义折叠文本

4.3 快速折叠与展开

5. 实用插件

5.1 vim-polyglot

5.2 NERDTree

5.3 vim-fugitive

6. 总结


在文本编辑器的使用中,语法高亮和代码折叠是两个非常重要的功能,它们可以极大地提升代码的可读性和编辑效率。Vim作为一款强大的文本编辑器,自然也支持这些功能。本文将详细介绍如何在Vim中启用和配置语法高亮与代码折叠,帮助你更高效地编写和管理代码。

1. 语法高亮

语法高亮是指在文本编辑器中,以不同的颜色显示代码的不同部分,以提高代码的可读性。Vim支持多种编程语言的语法高亮,并且可以根据需要进行自定义配置。

1.1 启用语法高亮

在Vim中,启用语法高亮非常简单,只需在.vimrc配置文件中添加以下内容:

syntax on

如果你在编辑过程中希望临时启用或关闭语法高亮,可以使用以下命令:

:syntax on   " 启用语法高亮
:syntax off  " 关闭语法高亮

1.2 设置配色方案

Vim提供了多种配色方案,可以根据个人喜好选择不同的配色方案。在.vimrc文件中添加以下内容以设置配色方案:

colorscheme desert

你可以通过以下命令查看所有可用的配色方案:

:colorscheme <Tab>

Tab键可以循环显示所有可用的配色方案,选择一个你喜欢的即可。

1.3 自定义语法高亮

除了使用内置的语法高亮方案外,Vim还允许用户自定义语法高亮。以下是一个自定义C语言语法高亮的示例:

syntax clear
syntax keyword cType int float double char
syntax keyword cStatement if else while for return
highlight cType guifg=#ff0000 ctermfg=red
highlight cStatement guifg=#0000ff ctermfg=blue

将上述代码添加到.vimrc文件中,即可自定义C语言的语法高亮。

2. 代码折叠

代码折叠是指将代码的某些部分折叠起来,以便更好地管理和浏览代码。Vim支持多种代码折叠方法,包括手动折叠、基于缩进的折叠和基于语法的折叠。

2.1 启用代码折叠

在Vim中,启用代码折叠只需在.vimrc文件中添加以下内容:

set foldenable

2.2 设置折叠方法

Vim支持以下几种折叠方法:

  • manual:手动折叠
  • indent:基于缩进的折叠
  • syntax:基于语法的折叠
  • expr:基于表达式的折叠
  • marker:基于标记的折叠

你可以在.vimrc文件中设置默认的折叠方法,例如:

set foldmethod=syntax

2.3 手动折叠

手动折叠是最灵活的一种折叠方法。以下是手动折叠的基本操作:

  • zf:创建折叠
  • zd:删除折叠
  • zo:打开折叠
  • zc:关闭折叠

例如,选择一段代码并按zf键,即可将该段代码折叠起来。

2.4 基于缩进的折叠

基于缩进的折叠可以自动根据代码的缩进层级进行折叠。设置基于缩进的折叠方法:

set foldmethod=indent

在这种模式下,Vim会根据代码的缩进层级自动创建折叠。

2.5 基于语法的折叠

基于语法的折叠会根据代码的语法结构自动创建折叠。设置基于语法的折叠方法:

set foldmethod=syntax

Vim会根据语法文件自动进行代码折叠,例如函数定义、类定义等。

3. 案例

为了更好地理解语法高亮和代码折叠在实际开发中的应用,以下是一个具体的示例。假设我们在Vim中编辑一个Python文件,并希望启用语法高亮和代码折叠。

3.1 配置文件

首先,编辑你的.vimrc文件,添加以下内容:

" 启用语法高亮
syntax on" 设置配色方案
colorscheme desert" 启用代码折叠
set foldenable" 设置基于语法的折叠方法
set foldmethod=syntax

3.2 编辑Python文件

创建一个名为example.py的Python文件,输入以下代码:

def greet(name):"""Greets the person with the given name."""print(f"Hello, {name}!")def main():names = ["Alice", "Bob", "Charlie"]for name in names:greet(name)if __name__ == "__main__":main()

在编辑器中打开该文件,你会看到代码已经根据缩进和语法进行了高亮显示,并且可以使用折叠功能来管理代码。

3.3 使用折叠功能

example.py文件中,尝试以下折叠操作:

  • 将光标放在greet函数定义处,按zf%,将整个函数折叠起来。
  • 使用zo打开折叠,使用zc关闭折叠。
  • 将光标放在main函数定义处,按zf%,将整个函数折叠起来。

通过这些操作,可以方便地管理和浏览代码,提高开发效率。

4. 高级使用技巧

4.1 自动命令

可以使用Vim的自动命令,在打开特定类型的文件时自动启用语法高亮和代码折叠。例如,以下配置会在打开Python文件时自动启用语法高亮和代码折叠:

augroup pythonautocmd!autocmd BufRead,BufNewFile *.py syntax onautocmd BufRead,BufNewFile *.py set foldmethod=syntax
augroup END

4.2 自定义折叠文本

可以自定义折叠后的显示文本,使其更加简洁明了。例如,以下配置会在折叠Python函数时显示函数定义:

set foldtext=CustomFoldText()function! CustomFoldText()let line = getline(v:foldstart)let numLines = v:foldend - v:foldstart + 1return line . ' ... ' . numLines . ' lines'
endfunction

4.3 快速折叠与展开

可以使用快捷键快速折叠和展开代码。例如,以下配置会将F1键映射为展开所有折叠,F2键映射为折叠所有代码:

nnoremap <F1> :set foldlevel=0<CR>
nnoremap <F2> :set foldlevel=20<CR>

5. 实用插件

Vim有许多插件可以增强语法高亮和代码折叠功能。以下是几个推荐的插件:

5.1 vim-polyglot

vim-polyglot是一个支持多种编程语言的语法高亮插件。安装该插件可以增强Vim的语法高亮功能。

# 使用Vundle安装
Plugin 'sheerun/vim-polyglot'

5.2 NERDTree

NERDTree是一个文件浏览器插件,可以帮助你更方便地管理项目文件和代码折叠。

# 使用Vundle安装
Plugin 'preservim/nerdtree'

5.3 vim-fugitive

vim-fugitive是一个Git集成插件,可以在Vim中方便地进行版本控制。

# 使用Vundle安装
Plugin 'tpope/vim-fugitive'

6. 总结

本文详细介绍了在Vim中使用语法高亮和代码折叠的基本方法和高级技巧。通过配置和使用这些功能,可以极大地提高代码的可读性和编辑效率。希望本文能帮助你更好地掌握Vim的语法高亮和代码折叠功能,并在实际开发中应用这些技巧。

相关文章:

Linux Vim教程(十二):语法高亮与代码折叠

目录 1. 语法高亮 1.1 启用语法高亮 1.2 设置配色方案 1.3 自定义语法高亮 2. 代码折叠 2.1 启用代码折叠 2.2 设置折叠方法 2.3 手动折叠 2.4 基于缩进的折叠 2.5 基于语法的折叠 3. 案例 3.1 配置文件 3.2 编辑Python文件 3.3 使用折叠功能 4. 高级使用技巧 …...

JavaScript(18)——事件类型,事件对象

事件类型 鼠标事件&#xff1a; click&#xff1a;鼠标点击 mouseenter&#xff1a;鼠标经过 mouseleave&#xff1a;鼠标离开 焦点事件&#xff1a; focus&#xff1a;获得焦点 blur&#xff1a;失去焦点 键盘事件&#xff1a; Keydown&#xff1a;键盘按下触发 Keyup&#…...

有效组织离散变量:指针数组在C语言中的应用

把离散变量组织起来&#xff0c;访问起来更加方便&#xff0c;无需一个个变量单独赋值。 如modbus读写reg&#xff0c; 把a\b\c\d实时变化分散的变量组织成一个数组reg&#xff0c;方便获取 相当于变量的内存地址池 int main() {int a 10, b 20, c 30, d 40;int i;int *re…...

qt 应用正在运行时,如何更新升级exe文件

在Qt应用正在运行时&#xff0c;直接替换同名的.exe文件可能会导致文件正在使用中的错误。为了安全地更新.exe文件&#xff0c;你可以采取以下步骤&#xff1a; 创建一个临时的.exe文件。 等待当前.exe文件的进程关闭。 删除原有的.exe文件。 将临时.exe文件重命名为原有的.…...

git的rebase 和 merge 的区别

rebase 和 merge 的区别 Merge&#xff08;合并&#xff09;和 Rebase&#xff08;变基&#xff09;是 Git 中两种常用的分支整合方式&#xff0c;它们有不同的工作原理和适用场景&#xff1a; Merge&#xff08;合并&#xff09;&#xff1a; ● Merge 操作将两个分支的不同提…...

django基于大数据的电影推荐系统-计算机毕业设计源码71246

目 录 摘 要 1 绪论 1.1 选题背景与意义 1.2研究现状 1.3研究内容 1.4 开发环境 1.5论文结构与章节安排 2 相关理论和技术 2.1 协同过滤算法 2.2 B/S体系结构介绍 2.3 Python爬虫技术 2.4 Django框架介绍 2.5 MySQL数据库 3 电影推荐系统系统分析 3.1 可行性分析…...

reverse_re3-入土为安的第十天

一个迷宫题 shirtf12发现flag字样 点进去发现迷宫 675 应该是3 * 15*15 即有三个迷宫 shifte提取 import numpy as np# 你的数据&#xff08;长度应为 225 的倍数&#xff09; dword_202020 [1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,3,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,…...

fastapi之一

文章目录 安装运行HTTP 请求方法示例 POSTMAN 检验GETPOSTPUTDELETE HTTP 状态码示例GETPOST 综合示例POSTGETPUTDELETE 总结 安装 pip install fastapi或者 pip install fastapi -i https://mirrors.aliyun.com/pypi/simple上面两种方法均可以&#xff0c;选择一个即可&…...

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…...

关于一个简单的顺序表代码

1.首先是头文件SeqList.h的代码&#xff1a; #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int SXBint; typedef struct SL {SXBint* a;int size;int capacity; }SLnode; //初始化 void SeqLsitInit(SLnode* ps); //尾插…...

【资料分享】2024第三届钉钉杯大学生大数据挑战赛B题思路解析+双语言代码

2024钉钉杯大学生大数据挑战赛&#xff0c;B题解题思路和双语言代码分享&#xff0c;资料预览&#xff1a;...

Typescript学习笔记(2.0)

ts编译选项 tsc app.ts -w 参数-w&#xff0c;就是对app.ts进行监视&#xff0c;每次该文件改变时就会自动编译 **:任意目录 *&#xff1a;任意文件 接口 接口用来定义一个类结构&#xff0c;用来定义一个类中应该包含哪些属性和方法&#xff0c;同时接口也可以当做类型…...

【IJHE】:微通道反应器中全氢二苄基甲苯脱氢产氢

Highlight 微通道反应器中全氢二苄基甲苯脱氢产氢两种不同反应器的比较&#xff1a;搅拌釜和连续微通道反应器连续微通道反应器是一种很有前途的脱氢技术 摘要: 本文对全氢二苄基甲苯作为液态有机氢载体从搅拌槽反应器转换为连续流微通道反应器进行脱氢进行了初步研究。与搅拌槽…...

Spring踩坑:抽象类作为父类,使用子类@Autowired属性进行填充,属性值为null

Spring踩坑&#xff1a;抽象类作为父类&#xff0c;使用子类Autowired属性进行填充&#xff0c;属性值为null Spring Boot中抽象类和依赖注入的最佳实践引言在抽象类中使用Autowired注解protected vs private修饰符低版本Spring Boot的注意事项 构造器中的依赖注入陷阱为什么不…...

C#网络连接:TCP/IP模式下的网络连接与同步

1&#xff0c;目的 为了测试局域网的消息同步&#xff0c;简单写了下TCP/IP模式的同步&#xff0c;参考这个帖子。 2&#xff0c;核心库部分 using System; using System.Net; using System.Net.Sockets; using System.Text;namespace Coldairarrow.Util.Sockets {/// <s…...

基于树莓派(Raspberry Pi) 的智能电表监测系统设计:集成 Home Assistant、SQLite 和 MQTT 协议

在全球对可持续发展和能源节约的关注日益加深的背景下&#xff0c;智能能源管理系统&#xff08;IEMS&#xff09;应运而生。该系统利用现代科技&#xff08;如物联网、云计算和大数据分析&#xff09;来优化能源使用&#xff0c;提高能效&#xff0c;降低能源成本。本文将详细…...

C语言程序设计(二)

四.找素数 素数&#xff1a;除了1和它本身不再有其他因数的自然数。换句话说&#xff1a;一个大于1的自然数 &#xff0c;如果只能被1和它本身整除&#xff0c;那就是素数&#xff08;质数&#xff09;。 在打印中遇到的问题就是&#xff0c;知道怎么写却总是运行不起来。主要…...

Oracle对数据库行和数据库的监控

前言&#xff1a; Oracle对表的监控分为数据行修改DML的监控、对表的DDL监控 1、对表的DML监控&#xff08;数据的增删改&#xff09; -- 创建测试表 create table tab_test01( id varchar2(100) default sys_guid(), name varchar2(100), insert_date date default sysdate…...

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…...

Vite + Vue3 + TS项目配置前置路由守卫

在现代前端开发中&#xff0c;使用 Vue 3 和 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具&#xff0c;可以显著提升开发体验。本文博主将指导你如何在 Vite Vue 3 TypeScript 项目中配置前置路由守卫&#xff08;Navigation Guards&#xff09;…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...