Linux 的编辑器--vim
1.Linux编辑器-vim使⽤
2.vim的基本概念
控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊Insert mode下,或者到 last line mode
只有在Insert mode下,才可以做⽂字输⼊,按「ESC」键可回到命令⾏模式。该模式是我们后⾯⽤的最频繁的编辑模式。
⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。在命令模式下,*shift+:* 即可进⼊该模式。要查看你的所有模式:打开 vim,底⾏模式直接输⼊ :help vim-modes
实际vim总共有12种模式,六种基础模式和六种新增模式,以为就是six BASIC modes和six ADDITIONAL modes.
3.vim的基本操作
模式间的操作
进入vim
$ vim test.c不过有⼀点要特别注意,就是你进⼊vim之后,是处于[正常模式],你要切换到[插⼊模式]才能够输⼊⽂字。
• 输⼊a• 输⼊i• 输⼊o
• ⽬前处于[插⼊模式],就只能⼀直输⼊⽂字,如果发现输错了字,想⽤光标键往回移动,将该字删除,可以先按⼀下「ESC」键转到[正常模式]再删除⽂字。当然,也可以直接删除。
• 「shift + ;」, 其实就是输⼊「:」
• : w (保存当前⽂件)• : wq (输⼊「wq」,存盘并退出vim)• : q! (输⼊q!,不存盘强制退出vim)
4.命令模式的命令
• 按「i」切换进⼊插⼊模式「insert mode」,按“i”进⼊插⼊模式后是从光标当前位置开始输⼊⽂件;• 按「a」进⼊插⼊模式后,是从⽬前光标所在位置的下⼀个位置开始输⼊⽂字;• 按「o」进⼊插⼊模式后,是插⼊新的⼀⾏,从⾏⾸开始输⼊⽂字。
上下:• 按[gg]:进⼊到⽂本开始• 按「G」:移动到⽂章的最后• 按「n+G」:移动到第n行左右:• 按「^」:移动到光标所在⾏的“⾏⾸”• 按「 $ 」:移动到光标所在⾏的“⾏尾”• vim可以直接⽤键盘上的光标来上下左右移动,但正规的vim是⽤⼩写英⽂字⺟「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移⼀格• 按「w」:光标跳到下个字的开头其他:• 按「e」:光标跳到下个字的字尾• 按「b」:光标回到上个字的开头• 按「#l」:光标移到该⾏的第#个位置,如:5l,56l• 按「ctrl」+「b」:屏幕往“后”移动⼀⻚• 按「ctrl」+「f」:屏幕往“前”移动⼀⻚• 按「ctrl」+「u」:屏幕往“后”移动半⻚• 按「ctrl」+「d」:屏幕往“前”移动半⻚
• 「x」:每按⼀次,删除光标所在位置的⼀个字符• 「#x」:例如,「6x」表⽰删除光标所在位置的“后⾯(包含⾃⼰在内)”6个字符• 「X」:⼤写的X,每按⼀次,删除光标所在位置的“前⾯”⼀个字符• 「#X」:例如,「20X」表⽰删除光标所在位置的“前⾯”20个字符• 「dd」:删除光标所在⾏• 「#dd」:从光标所在⾏开始删除#⾏
• 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。• 「#yw」:复制#个字到缓冲区• 「yy」:复制光标所在⾏到缓冲区。• 「#yy」:例如,「6yy」表⽰拷⻉从光标所在的该⾏“往下数”6⾏⽂字。• 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
• 「yy」:复制光标所在⾏到缓冲区。• 「dd」:删除光标所在⾏,所在⾏到缓冲区。• 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
• 「r」:替换光标所在处的字符。• 「R」:替换光标所到之处的字符,直到按下「ESC」键为⽌。
• 「u」:如果您误执⾏⼀个命令,可以⻢上按下「u」,回到上⼀个操作。按多次“u”可以执⾏多次回复。• 「ctrl + r」: 撤销的恢复
• 「cw」:更改光标所在处的字,输入一个新的字,esc退出。• 「c#w」:例如,「c3w」表⽰更改3个字
切换大小写:
shift+`==~:切换大小写
查找:
shift+1==#:光标所在单词的下一个位置。
5.vim末⾏模式命令集
在使⽤末⾏模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进⼊末⾏模式。
• 「set nu」: 输⼊「set nu」后,会在⽂件中的每⼀⾏前⾯列出⾏号。
• 「#」:「#」号表⽰⼀个数字,在冒号后输⼊⼀个数字,再按回⻋键就会跳到该⾏了,如输⼊数字15,再回⻋,就会跳到⽂章的第15⾏。
• 「/关键字」: 先按「/」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往后寻找到您要的关键字为⽌。• 「?关键字」:先按「?」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往前寻找到您要的关键字为⽌。• 问题:∕ 和 ?查找有和区别?操作实验⼀下
保存⽂件
• 「w」: 在冒号输⼊字⺟「w」就可以将⽂件保存起来
• 「q」:按「q」就是退出,如果⽆法离开vim,可以在「q」后跟⼀个「!」强制离开vim。• 「wq」:⼀般建议离开时,搭配「w」⼀起使⽤,这样在退出的时候还可以保存⽂件。
批量替换:
%s /scr/dst/g
分屏:
vs 文件名:分屏光标在哪边就是对哪边操作 、
ctrl+ww :切换光标所在文件
6.批量注释操作
这里我们需要用到新的模式,视图模式了解即可
批量化注释:
1.ctrl+v :进入视图模式
2.hjkl :移动光标
3.shift+i :进入插入模式。
4.输入//
5.ESC返回
批量化去注释:
1.ctrl+v :进入视图模式
2.hjkl :移动光标
3.d :删除。
hjkl选中区域就是我们视图模式操作的区域。
7.vim的配置
以下是一份专为 C/C++ 开发优化的 Vim 配置流程,涵盖代码补全、调试、格式化、项目管理等关键功能,适合在终端高效开发。
1. 安装 Vim(确保版本 ≥ 8.2)
# Ubuntu/Debian sudo apt update && sudo apt install vim-gtk # 支持剪贴板# macOS brew install vim# Windows (通过 Chocolatey) choco install vim
2. 创建 ~/.vimrc
并配置基础选项
" === 基础设置 === set nocompatible " 禁用 Vi 兼容模式 filetype plugin indent on " 启用文件类型检测 syntax enable " 语法高亮 set number " 显示行号 set relativenumber " 相对行号(方便跳转) set tabstop=4 " Tab 显示为 4 空格 set shiftwidth=4 " 自动缩进 4 空格 set expandtab " Tab 转空格 set smartindent " 智能缩进 set cursorline " 高亮当前行 set mouse=a " 启用鼠标支持(可选)" === 搜索优化 === set incsearch " 实时搜索 set ignorecase " 忽略大小写 set smartcase " 包含大写时区分大小写" === 快捷键映射 === let mapleader = " " " 设置 Leader 键为空格 nnoremap <leader>w :w<CR> " 快速保存 nnoremap <leader>q :q<CR> " 快速退出 inoremap jj <Esc> " 用 jj 退出插入模式
3. 安装插件管理器 Vim-Plug
# Linux/macOS curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim# Windows (PowerShell) iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`ni "$env:USERPROFILE/vimfiles/autoload/plug.vim" -Force
4. 配置 C/C++ 专用插件(添加到 ~/.vimrc
)
call plug#begin('~/.vim/plugged')" === 主题 & UI === Plug 'gruvbox-community/gruvbox' " 经典主题 Plug 'vim-airline/vim-airline' " 状态栏美化" === 代码补全 & LSP === Plug 'neoclide/coc.nvim', {'branch': 'release'} " 强大的 LSP 支持" === 代码导航 & 分析 === Plug 'preservim/tagbar' " 显示代码结构(依赖 ctags) Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " 模糊搜索 Plug 'junegunn/fzf.vim'" === C/C++ 增强 === Plug 'rhysd/vim-clang-format' " 自动格式化(需安装 clang-format) Plug 'bfrg/vim-cpp-modern' " C++ 语法高亮增强" === 调试 === Plug 'puremourning/vimspector' " 图形化调试(类似 VS Code)" === 项目管理 === Plug 'preservim/nerdtree' " 文件树call plug#end()" === 主题设置 === colorscheme gruvbox set background=dark
5. 安装插件
-
保存
~/.vimrc
后,打开 Vim。 -
运行
:PlugInstall
安装所有插件。
6. 配置 LSP(C/C++ 语言服务器)
安装依赖
# 安装 clangd(C/C++ LSP 后端) # Ubuntu/Debian sudo apt install clangd-12 # macOS brew install llvm
配置 coc.nvim
在 Vim 中运行 :CocConfig
,添加以下内容(JSON 格式):
{"languageserver": {"clangd": {"command": "clangd","rootPatterns": ["compile_commands.json", ".git"],"filetypes": ["c", "cpp", "objc", "objcpp"]}} }
常用 Coc 命令
-
:CocList diagnostics
查看错误 -
:CocCommand clangd.switchSourceHeader
切换 .h/.cpp -
Ctrl+Space
触发补全
7. 配置 Clang-Format(代码格式化)
-
安装
clang-format
:sudo apt install clang-format # Ubuntu/Debian brew install clang-format # macOS
-
在
~/.vimrc
中添加快捷键:" 按 \= 格式化当前行或选区 nmap <leader>= :ClangFormat<CR> vmap <leader>= :ClangFormat<CR>
8. 配置调试(Vimspector)
-
安装调试器(如
gdb
):sudo apt install gdb # Ubuntu/Debian brew install gdb # macOS
-
在项目根目录创建
.vimspector.json
:{"configurations": {"C++ Launch": {"adapter": "vscode-cpptools","configuration": {"request": "launch","program": "${workspaceRoot}/a.out", " 修改为你的可执行文件路径"args": [],"stopAtEntry": true}}} }
-
快捷键:
-
F5
开始调试 -
F9
断点 -
F10
单步跳过
-
9. 常用快捷键总结
快捷键 | 功能 |
---|---|
<Leader> + n | 打开/关闭文件树 (NERDTree) |
<Leader> + t | 打开 Tagbar(代码结构) |
<Leader> + f | 模糊搜索文件 (FZF) |
Ctrl + ] | 跳转到定义(LSP) |
Ctrl + o | 返回上一个位置 |
gd | 查看定义(LSP) |
10. 最终效果
-
代码补全:
coc.nvim
+clangd
-
调试:
vimspector
图形化界面 -
格式化:
clang-format
一键美化 -
导航:
fzf
+tagbar
快速跳转
附:快速恢复配置(备份与共享)
# 备份配置 cp ~/.vimrc ~/vimrc_backup# 在新机器恢复 curl -fLo ~/.vimrc https://your-config-url/vimrc vim +PlugInstall +qall
这样配置后,你的 Vim 将成为一个强大的 C/C++ IDE! 🚀
相关文章:

Linux 的编辑器--vim
1.Linux编辑器-vim使⽤ vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以…...
Oracle 慢sql排查
Oracle慢sql排查步骤 1.1. 前言 Oracle 慢查询的排查方向包括以下几个方向 : 基准测试 (吞吐量): 包括 Oracle 本身吞吐量和磁盘 I/O 吞吐量硬件分析 (资源情况): 包括查看服务器 CPU , 硬盘的使用情况SQL分析:分析 SQL 中是否存在慢查询 , 是否命中索引配置优化…...

[Protobuf] 快速上手:安全高效的序列化指南
标题:[Protobuf] (1)快速上手 水墨不写bug 文章目录 一、什么是protobuf?二、protobuf的特点三、使用protobuf的过程?1、定义消息格式(.proto文件)(1)指定语法版本(2)package 声明符 2、使用protoc编译器生成代码&…...
uniapp开发企业微信小程序时 wx.qy.login 在uniapp中使用的时候,需要导包吗?
在 UniApp 中使用 “wx.qy.login” 不需要手动导包,但需要满足以下条件: 一、环境要求与配置 1� 企业微信环境判断 必须确保当前运行环境是企业微信客户端,通过 “uni.getSystemInfoSync().environment” 判断是否为 “wxwork”…...

如何将通话记录从Android传输到Android
“如何将通话记录从 Android 转移到 Android?我换了一部新的 Android 手机,想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况,因为通话记录是手机上最重要的数据之一。幸运的是,如果您从…...
Word 目录自动换行后错位与页码对齐问题解决教程
📘 Word 目录自动换行错位与页码对齐问题解决教程 🎯 目标效果 目录条目过长自动换行后,第二行左对齐整齐;页码始终靠右对齐,前方带有“……”引导符;解决页码错位、制表符消失或格式混乱问题。 …...

数据结构第4章 栈、队列和数组 (竟成)
目录 第 4 章 栈、队列和数组 4.1 栈 4.1.1 栈的基本概念 4.1.2 栈的基本操作 4.1.3 栈的实现 1.顺序栈 2.链式栈 3.共享栈 4.1.4 顺序栈的基本操作实现 1.初始化栈 2.判空 3.判满 4.元素进栈 5.元素出栈 6.获取栈顶元素 4.1.5 链栈的基本操作实现 1.元素进栈 2.元素出栈 4.1.6…...
removeIf() 方法,结合 Lambda 表达式
在 Java 8 中,removeIf() 方法是 Collection 接口新增的一个默认方法,用于根据条件批量删除集合中的元素。结合 Lambda 表达式,可以以极简的语法实现复杂的过滤逻辑。以下是详细说明: 1. 方法定义与语法 // java.util.Collection 接口中的定义 default boolean removeIf(P…...
汽车售后诊断数据流详细分析
一、引言 随着汽车电子化程度的不断提升,电控系统已成为车辆运行的核心支撑。据罗兰贝格 2025 年智能汽车白皮书数据显示,中央计算 区域控制架构(Zonal EEA)的普及率已突破 58%,推动整车线束成本下降 41%12。与此同时…...

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖(漏洞挖掘&#x…...

Unity 游戏优化(持续更新中...)
垃圾回收 是什么? 垃圾回收(Garbage Collection)GC 工作机制 1、Unity 为用户生成的代码和脚本采用了自动内存管理。 2、小块数据(如值类型的局部变量)分配在栈上。大块数据和长期存储分配在托管堆上。 3、垃圾收集…...
LlamaFactory——如何使用魔改后的模型
需求来源:有时我们可能想在llamafactory框架支持的模型上进行一些改动,例如修改forward()方法等,修改方法我们可以通过继承Transformers库中相应的class并重写相应的方法即可,那我们如何使用自己的模型呢? 首先&#…...
【前端】【css预处理器】Sass与Less全面对比与构建对应知识体系
第一章 概述 1.1 Sass和Less简介 1.1.1 Sass简介 Sass(Syntactically Awesome Stylesheets)是一种 CSS 预处理器,它为 CSS 赋予了更多强大的功能和更灵活的语法结构😎。 语法特点:Sass 有两种语法格式。一种是 .sa…...
【请关注】关于VC++实现使用Redis不同方法,有效达到 Redis 性能优化、防击穿
麻烦先关注方便了解最新分享。 关于VC实现使用Redis不同方法,有效达到 Redis 性能优化、防击穿。 一、性能优化核心方法 1. 使用连接池复用连接 // 连接池结构体 struct RedisPool { hiredisContext** connections; int size; sem_t sem; // 信号量控制并发 }; //…...
【加密算法】
计算机网络加密算法详解 在计算机网络中,加密算法是保障数据安全的核心技术,用于防止数据在传输过程中被窃听、篡改或伪造。本文将详细介绍常见的加密算法分类、工作原理及其在网络中的应用。 1. 加密算法分类 加密算法主要分为以下三类: 类型特点典型算法对称加密加密和解…...

20250529-C#知识:索引器
C#知识:索引器 索引器给对象添加了索引访问的功能,实际访问的是对象的成员,感觉不太常用。 1、主要内容及代码示例 索引器中类似属性,也包含get和set方法索引器能够使像访问数组一样访问对象一般当类中有数组类型的成员变量时&am…...

【笔记】suna部署之获取 Tavily API key
#工作记录 Tavily 注册 Tavily 账号5: 打开浏览器,访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮,按照提示填写注册信息,如邮箱地址、设置密码等,完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…...

06-Web后端基础(java操作数据库)
1. 前言 在前面我们学习MySQL数据库时,都是利用图形化客户端工具(如:idea、datagrip),来操作数据库的。 我们做为后端程序开发人员,通常会使用Java程序来完成对数据库的操作。Java程序操作数据库的技术呢,有很多啊&a…...
JavaScript性能优化实战的技术文-——仙盟创梦IDE
JavaScript性能优化实战技术文章大纲 性能优化的核心原则 减少代码执行时间降低内存消耗优化网络请求提升用户体验 代码层面的优化 减少全局变量使用,避免命名冲突和内存泄漏使用节流(throttle)和防抖(debounce)优…...
GitHub Copilot 使用手册与原理解析
一、Copilot 简介 GitHub Copilot 是由 GitHub 联合 OpenAI 推出的 AI 编程助手。它能在你编程时,基于上下文智能补全代码、自动生成函数、编写测试用例、解释代码含义等,大幅提高编程效率。 即便有 Google、Amazon、Meta 等强劲竞争对手推出免费工具&…...
vllm 2080TI ubuntu环境安装
#TOC 欢迎使用Markdown编辑器安装gcc 9 sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get install gcc-9 g-9sudo apt-get install gcc-9 g-9sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g g /usr/bin/g-9gcc …...
【C语言】指针详解(接)
前言: 文接上章,在上章节讲解了部分指针知识点,在本章节为大家继续提供。 六指针与字符串:C 语言字符串的本质 在 C 语言中,字符串实际上是一个以\0结尾的字符数组。字符串常量本质上是指向字符数组首元素的指针&…...
【C】箭头运算符
在C语言中,p_tone->power_off 是一种通过指针访问结构体成员的方法,称为箭头运算符(->)。它主要用于以下场景: 1. 语法解释 p_tone:是一个指向结构体(或联合体)的指针。powe…...
HTTP Accept简介
一、HTTP Accept是什么 HTTP协议是一个客户端和服务器之间进行通信的标准协议,它定义了发送请求和响应的格式。而HTTP Accept是HTTP协议中的一个HTTP头部,用于告诉服务器请求方所期望的响应格式。这些格式可以是媒体类型、字符集、语言等信息。 HTTP A…...

什么是单片机?
众所周知,人类行为受大脑调控,正如视觉、听觉、味觉、嗅觉、触觉及运动功能等感官与肢体活动均受其指挥;换言之,大脑作为人体的中枢神经系统,负责管理所有可控制的生理功能。 在电子设备领域,单片机…...
联通专线加持!亿林网络 24 核 32G 裸金属服务器,千兆共享带宽适配中小型企业 IT 架构
在当今数字化时代,企业的业务运营越来越依赖高效、稳定的 IT 架构。对于中小型企业而言,如何在有限的预算内构建强大且可靠的 IT 基础设施,是一项关键挑战。亿林网络推出的 24 核 32G 裸金属服务器,搭配联通专线和千兆共享带宽&am…...

Ubuntu的shell脚本
关于shell脚本 • shell脚本是文本的一种。 • shell脚本是可以运行的文本。 • shell脚本的内容是由说辑和数据组成。 • shell 脚本是解释型语言。 shell脚本存在的意义 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具 Linux/UNIX系统…...
微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理
实现效果:微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理 首先在web-view里是不可实现的(据我了解下来) 参考小程序文档:page-container 大致逻辑: 1、page-container可实现页面离开前拦截 2、由于web-vie…...

从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE
租房公寓电费管理系统是集智能计量、自动化计费、线上缴费、数据管理于一体的综合性解决方案,旨在解决传统电费管理中人工抄表误差大、收费效率低、纠纷频发等痛点。系统通过部署智能电表实时采集用电数据,结合云计算与大数据分析技术,实现电…...
Rust 学习笔记:关于闭包的练习题
Rust 学习笔记:关于闭包的练习题 Rust 学习笔记:关于闭包的练习题问题 1问题 2以下程序能否通过编译?若能,输出是?以下程序能否通过编译?若能,输出是?考虑该 API,空白处填…...