当前位置: 首页 > 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;…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...