Linux 的编辑器--vim

1.Linux编辑器-vim使⽤

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以运⾏于x window、 mac os、 windows。

2.vim的基本概念

vim的三种模式(其实有好多模式,前期掌握这3种即可),分别是命令模式(command
mode)、插⼊模式(Insert mode)和底⾏模式(last line mode)

正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊Insert mode下,或者到 last line mode
插⼊模式(Insert mode)
只有在Insert mode下,才可以做⽂字输⼊,按「ESC」键可回到命令⾏模式。该模式是我们后⾯⽤的最频繁的编辑模式。
末⾏模式(last line mode)
⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。
在命令模式下,*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 + ;」, 其实就是输⼊「:」
退出vim及保存⽂件,在[正常模式]下,按⼀下「:」冒号键进⼊「Last line mode」
: 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」就可以将⽂件保存起来
离开vim
「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. 安装插件

  1. 保存 ~/.vimrc 后,打开 Vim。

  2. 运行 :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(代码格式化)

  1. 安装 clang-format

    sudo apt install clang-format  # Ubuntu/Debian
    brew install clang-format     # macOS
  2. 在 ~/.vimrc 中添加快捷键:

    " 按 \= 格式化当前行或选区
    nmap <leader>= :ClangFormat<CR>
    vmap <leader>= :ClangFormat<CR>

8. 配置调试(Vimspector)

  1. 安装调试器(如 gdb):

    sudo apt install gdb  # Ubuntu/Debian
    brew install gdb     # macOS
  2. 在项目根目录创建 .vimspector.json

    {"configurations": {"C++ Launch": {"adapter": "vscode-cpptools","configuration": {"request": "launch","program": "${workspaceRoot}/a.out",  " 修改为你的可执行文件路径"args": [],"stopAtEntry": true}}}
    }
  3. 快捷键:

    • 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! 🚀

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

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

相关文章

SAP Commerce(Hybris)开发实战(二):登陆生成token问题

问题简述 最近处理Hybris框架标准的登陆功能&#xff0c;遇到一个问题&#xff1a;用两个不同的浏览器&#xff0c;同时登陆一个账号&#xff0c;会同时生成两个不同的token和refreshToken。 问题原因 解决了其实非常简单&#xff0c;就是Hybris的Employee表中&#xff0c;有一…

c/c++的opencv椒盐噪声

在 C/C 中实现椒盐噪声 椒盐噪声&#xff08;Salt-and-Pepper Noise&#xff09;&#xff0c;也称为脉冲噪声&#xff08;Impulse Noise&#xff09;&#xff0c;是数字图像中常见的一种噪声类型。它的特点是在图像中随机出现纯白色&#xff08;盐&#xff09;或纯黑色&#x…

LIEDNet: A Lightweight Network for Low-light Enhancement and Deblurring论文阅读

摘要 夜间拍摄的图像常常面临诸如低光和模糊等挑战&#xff0c;这些问题主要是由于昏暗环境和长时间曝光的频繁使用所导致。现有方法要么独立处理这两种退化问题&#xff0c;要么依赖于通过复杂机制生成的精心设计的先验知识&#xff0c;这导致了较差的泛化能力和较高的模型复…

谈谈worldquant中设置的几个意思

Decay 是一个设置&#xff0c;用于确定要反映多少过去的位置。正如我们之前详细介绍的那样&#xff0c;Decay 值越高&#xff0c;Alpha 周转率越低。但是&#xff0c;请注意&#xff0c;Alpha 的夏普比率可能会随着信息延迟而降低。 创建 Alpha 时&#xff0c;头寸可能会集中在…

大模型和AI工具汇总(一)

一、国内可免费使用的大模型&#xff08;持续更新&#xff09; DeepSeek 模型介绍&#xff1a;DeepSeek 系列包括 DeepSeek V3&#xff08;通用场景&#xff09;、DeepSeek R1&#xff08;推理模型&#xff09;&#xff0c;支持高达 64K 上下文长度&#xff0c;中文场景表现优…

HarmonyOS NEXT 技术特性:分布式软总线技术架构

HarmonyOS NEXT 技术特性&#xff1a;分布式软总线技术架构 随着物联网发展&#xff0c;2030 预计全球联网设备达 2000 亿&#xff0c;异构设备互联难题凸显&#xff0c;分布式软总线作为 HarmonyOS 生态核心&#xff0c;以软件虚拟总线打破物理局限&#xff0c;让跨品牌设备即…

什么是VR展馆?VR展馆的实用价值有哪些?

VR展馆&#xff0c;重塑展览体验。在数字化时代浪潮的推动下&#xff0c;传统的实体展馆经历前所未有的变革。作为变革的先锋&#xff0c;VR展馆以无限的潜力&#xff0c;成为展览行业的新宠。 VR展馆&#xff0c;即虚拟现实展馆&#xff0c;是基于VR&#xff08;Virtual Real…

VLA模型:自动驾驶与机器人行业的革命性跃迁,端到端智能如何重塑未来?

当AI开始操控方向盘和机械臂&#xff0c;人类正在见证一场静默的产业革命。 2023年7月&#xff0c;谷歌DeepMind抛出一枚技术核弹——全球首个视觉语言动作模型&#xff08;VLA&#xff09;RT-2横空出世。这个能将“把咖啡递给穿红衣服的阿姨”这类自然语言指令直接转化为机器人…

华为OD机试真题——出租车计费/靠谱的车 (2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

40 岁 Windows 开启 AI 转型:从系统到生态的智能重构

在科技快速发展的当下&#xff0c;人工智能成为驱动各领域变革的核心力量&#xff0c;拥有 40 年历史的 Windows 也开启了向 AI 的全面转型。2025 年 5 月 19-22 日西雅图 Build 2025 开发者大会上&#xff0c;微软展示了 Windows 11 向 AI 智能体核心平台转型的战略&#xff0…

Python实例题:Python3实现可控制肉鸡的反向Shell

目录 Python实例题 题目 代码实现 reverse_shell_client.py reverse_shell_server.py 实现原理 反向连接机制&#xff1a; 命令执行与传输&#xff1a; 功能特点&#xff1a; 关键代码解析 服务端命令处理 客户端命令执行 客户端持久化连接 使用说明 启动服务端…

AWS EC2 使用Splunk DB connect 连接 RDS mysql

1: 先创建 RDS mysql: 我们选择free: 选择free 过后,自动生成single instance, 没有垮AZ 的db 设置。 选择密码登入: 注意:上面设置密码的时候,特别提示:不能有特殊字符,我就设置了: mypassword 下面可以选择通过EC2 连接,当然也可以不选:

SAP重塑云ERP应用套件

在2025年Sapphire大会上&#xff0c;SAP正式发布了其云ERP产品的重塑计划&#xff0c;推出全新“Business Suite”应用套件&#xff0c;并对供应链相关应用进行AI增强升级。这一变革旨在简化新客户进入SAP生态系统的流程&#xff0c;同时为现有客户提供更加统一、智能和高效的业…

初识 RocketMQ 知识总结:基础概念、架构解析、核心特性与应用场景

Apache RocketMQ 是一款由阿里巴巴开源的分布式消息中间件&#xff0c;具有高吞吐量、低延迟、高可靠性等特点&#xff0c;广泛应用于互联网、金融、电商等领域。以下从多个维度对 RocketMQ 进行全面解析&#xff1a; 一、RocketMQ 基础概念 1. 定义与定位 分布式消息中间件…

[特殊字符] UI-Trans:字节跳动发布的多模态 UI 转换大模型工具,重塑界面智能化未来

2025 年&#xff0c;字节跳动&#xff08;ByteDance&#xff09;发布了革命性的多模态 UI 转换模型 —— UI-Trans&#xff0c;引发了业界广泛关注。作为一款融合视觉理解、语义分析与用户交互意图解析的 AI 工具&#xff0c;UI-Trans 在多个领域展现出强大能力&#xff0c;正在…

这个方法关闭PowerBI账户的安全默认值

这个方法关闭PowerBI账户的安全默认值 如果PowerBI账户是在 2019 年 10 月 22 日当天或之后创建的&#xff0c;则可能会自动启用安全默认值&#xff0c;登录账户会弹出弹框&#xff0c;如图&#xff1a; 使用四步就可以关闭此弹框的提示&#xff1a; 第一步&#xff1a;转到 A…

【Linux】磁盘空间不足

错误提示: no space left on device 经典版&#xff08;block占用&#xff09; 模拟 dd if/dev/zero of/var/log/nginx.log bs1M count2000排查 #1. df -h 查看哪里空间不足,哪个分区#2. du -sh详细查看目录所占空间 du -sh /* 排查占用空间大的目录 du -sh /var/* du…

计算机视觉---YOLOv2

YOLOv2讲解 一、YOLOv2 整体架构与核心特性 YOLOv2&#xff08;You Only Look Once v2&#xff09;于2016年发布&#xff0c;全称为 YOLO9000&#xff08;因支持9000类目标检测&#xff09;&#xff0c;在YOLOv1基础上进行了多项关键改进&#xff0c;显著提升了检测精度和速度…

【深度学习】1. 感知器,MLP, 梯度下降,激活函数,反向传播,链式法则

一、感知机 对于分类问题&#xff0c;我们设定一个映射&#xff0c;将x通过函数f(x)映射到y 1. 感知机的基本结构 感知机&#xff08;Perceptron&#xff09;是最早期的神经网络模型&#xff0c;由 Rosenblatt 在 1958 年提出&#xff0c;是现代神经网络和深度学习模型的雏形…

IP、子网掩码、默认网关、DNS

IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公网ip2.2 内网ip2.3 &#x1f310; 公网 IP 与内网 IP 的关系&#xff08;NAT&#xff09; 3. 子网掩码&#xff08;Subnet Mask&#xff09;4. 默认网…