Linux 的编辑器--vim

news2025/6/1 4:02:27

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.coloradmin.cn/o/2392531.html

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

相关文章

[Protobuf] 快速上手:安全高效的序列化指南

标题&#xff1a;[Protobuf] (1)快速上手 水墨不写bug 文章目录 一、什么是protobuf&#xff1f;二、protobuf的特点三、使用protobuf的过程&#xff1f;1、定义消息格式&#xff08;.proto文件&#xff09;(1)指定语法版本(2)package 声明符 2、使用protoc编译器生成代码&…

如何将通话记录从Android传输到Android

“如何将通话记录从 Android 转移到 Android&#xff1f;我换了一部新的 Android 手机&#xff0c;想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况&#xff0c;因为通话记录是手机上最重要的数据之一。幸运的是&#xff0c;如果您从…

数据结构第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…

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)

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

Unity 游戏优化(持续更新中...)

垃圾回收 是什么&#xff1f; 垃圾回收&#xff08;Garbage Collection&#xff09;GC 工作机制 1、Unity 为用户生成的代码和脚本采用了自动内存管理。 2、小块数据&#xff08;如值类型的局部变量&#xff09;分配在栈上。大块数据和长期存储分配在托管堆上。 3、垃圾收集…

20250529-C#知识:索引器

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

【笔记】suna部署之获取 Tavily API key

#工作记录 Tavily 注册 Tavily 账号5&#xff1a; 打开浏览器&#xff0c;访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮&#xff0c;按照提示填写注册信息&#xff0c;如邮箱地址、设置密码等&#xff0c;完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…

06-Web后端基础(java操作数据库)

1. 前言 在前面我们学习MySQL数据库时&#xff0c;都是利用图形化客户端工具(如&#xff1a;idea、datagrip)&#xff0c;来操作数据库的。 我们做为后端程序开发人员&#xff0c;通常会使用Java程序来完成对数据库的操作。Java程序操作数据库的技术呢&#xff0c;有很多啊&a…

什么是单片机?

众所周知&#xff0c;人类行为受大脑调控&#xff0c;正如视觉、听觉、味觉、嗅觉、触觉及运动功能等感官与肢体活动均受其指挥&#xff1b;换言之&#xff0c;大脑作为人体的中枢神经系统&#xff0c;负责管理所有可控制的生理功能。 在电子设备领域&#xff0c;单片机…

Ubuntu的shell脚本

关于shell脚本 • shell脚本是文本的一种。 • shell脚本是可以运行的文本。 • shell脚本的内容是由说辑和数据组成。 • shell 脚本是解释型语言。 shell脚本存在的意义 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具 Linux/UNIX系统…

从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE

租房公寓电费管理系统是集智能计量、自动化计费、线上缴费、数据管理于一体的综合性解决方案&#xff0c;旨在解决传统电费管理中人工抄表误差大、收费效率低、纠纷频发等痛点。系统通过部署智能电表实时采集用电数据&#xff0c;结合云计算与大数据分析技术&#xff0c;实现电…

记一次前端逻辑绕过登录到内网挖掘

前言 在测试一个学校网站的时候&#xff0c;发现一个未授权访问内网系统&#xff0c;但是这个未授权并不是接口啥的&#xff0c;而是对前端 js 的审计和调试发现的漏洞&#xff0c;这里给大家分享一下这次的漏洞的过程。 进入内网的过程 可以看到是一个图书馆的网站&#xff…

Springboot 整合 WebSocket 实现聊天室功能

目录 前言一、WebSocket原理二、Spring Boot集成WebSocket2.1. 引入依赖2.2 配置类WebSocketConfig2.3 WebSocketServer 类2.4 前端代码 index.html2.5 Controller访问首页 前言 WebSocket概述&#xff1a; 在日常的web应用开发中&#xff0c;常见的是前端向后端发起请求&…

用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容

很多程序员都有这样的经历&#xff1a;刷掘金、看文章、找灵感、追热点。但你有没有想过&#xff0c;有一天让“爬虫”代替你去浏览这些内容&#xff1f;自动提取标题、作者、点赞数、评论数&#xff0c;一键生成你的专属“技术热点日报”。 今天我们就用 Trae IDE PyQt5 来完…

python和风api获取天气(JSON Web Token)

下载安装openssl 默认安装目录&#xff0c;添加C:\Program Files\OpenSSL-Win64\bin到用户Path环境变量 打开cmd&#xff0c;执行命令&#xff0c;会生成两个文件ed25519-private.pem&#xff0c;ed25519-public.pem openssl genpkey -algorithm ED25519 -out ed25519-privat…

52、C# 泛型 (Generics)

泛型是 C# 2.0 引入的一项强大功能&#xff0c;它允许你编写可以处理多种数据类型的代码&#xff0c;而无需为每种类型重复编写相同的逻辑。泛型提高了代码的重用性、类型安全性和性能。 基本概念 泛型类 public class GenericClass<T> {private T _value;public Gene…

Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果

背景介绍&#xff1a;在PCB设计过程中&#xff0c;布线初期印制板上的飞线错综复杂&#xff0c;信号线和电源线混合交错&#xff0c;但是实际上对于多层板来说&#xff0c;电源的网络一般是通过电源层铺铜连接的&#xff0c;很少需要走线&#xff0c;这样混乱的情况会严重影响设…

一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例

目录 一、ESP-01S无线模块: &#xff08;1&#xff09;特点&#xff1a; &#xff08;2&#xff09;管脚定义&#xff1a; &#xff08;3&#xff09;启动模式&#xff1a; 二、ESP-01S出厂固件烧录&#xff1a; &#xff08;1&#xff09;引脚接线&#xff1a; &#xff0…

算法-基础算法

一、枚举算法 也称为穷举算法&#xff0c;指的是按照问题本身的性质&#xff0c;一一列举出该问题所有可能的解&#xff0c;并在逐一列举的过程中&#xff0c;将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中&#xff0c;既不能遗漏也不能重复 1. 问题 …

Reactor模式详解:高并发场景下的事件驱动架构

文章目录 前言一、Reactor模式核心思想二、工作流程详解2.1 服务初始化阶段2.2 主事件循环2.3 子Reactor注册流程2.4 IO事件处理时序2.5 关键设计要点 三、关键实现技术四、实际应用案例总结 前言 在现代高性能服务器开发中&#xff0c;如何高效处理成千上万的并发连接是一个关…