Vim使用完全指南:从基础到高效编辑

Vim使用完全指南:从基础到高效编辑

一、Vim简介与基本概念

Vim(Vi IMproved)是从vi发展出来的一个功能强大的文本编辑器,以其高效性和灵活性著称,特别适合程序开发和系统管理任务。与常规文本编辑器不同,Vim采用模式编辑的设计理念,这使得它拥有独特的工作方式。

Vim的三种主要模式

  1. 普通模式(Normal Mode)

    • 启动Vim后的默认模式
    • 用于执行编辑器命令、移动光标和操作文本
    • 所有其他模式最终都会返回到普通模式
  2. 插入模式(Insert Mode)

    • 用于输入和编辑文本内容
    • 类似于常规文本编辑器的编辑状态
    • 通过多种命令可以进入插入模式
  3. 命令行模式(Command-line Mode)

    • 用于执行保存文件、退出编辑器等操作
    • 通过普通模式下按:进入
    • 也支持查找替换等高级功能

模式切换是Vim高效编辑的基础,理解并熟练掌握模式切换是学习Vim的第一步。

二、Vim基础操作与常用命令

1. 文件操作

打开文件
vim 文件名          # 打开指定文件
vim +n 文件名       # 打开文件并定位到第n行
vim +/pattern 文件名 # 打开文件并搜索pattern
保存与退出
:w              # 保存文件
:wq 或 :x       # 保存并退出
:q              # 退出(文件未修改时)
:q!             # 强制退出,不保存修改
:w 新文件名      # 另存为

2. 光标移动

基本移动
h        # 左
j        # 下
k        # 上
l        # 右
高效移动
w/W      # 下一个单词开头(W忽略标点)
b/B      # 上一个单词开头
e/E      # 下一个单词结尾
0        # 行首
$        # 行尾
gg       # 文件开头
G        # 文件末尾
:n       # 跳转到第n行
屏幕滚动
Ctrl+f   # 向下翻页
Ctrl+b   # 向上翻页
Ctrl+d   # 向下半页
Ctrl+u   # 向上半页
zz       # 当前行居中

3. 文本编辑

插入文本
i        # 在光标前插入
a        # 在光标后插入
I        # 在行首插入
A        # 在行尾插入
o        # 在下方新建行插入
O        # 在上方新建行插入
删除文本
x        # 删除当前字符
dw       # 删除到下一个单词开头
d$       # 删除到行尾
dd       # 删除整行
ndd      # 删除n行
复制粘贴
yy       # 复制当前行
yw       # 复制当前单词
p        # 在光标后粘贴
P        # 在光标前粘贴
撤销与重做
u        # 撤销
Ctrl+r   # 重做

三、Vim高效编辑技巧

1. 查找与替换

查找
/pattern  # 向前搜索pattern
?pattern  # 向后搜索pattern
n        # 下一个匹配项
N        # 上一个匹配项
替换
:s/old/new       # 替换当前行第一个old
:s/old/new/g     # 替换当前行所有old
:%s/old/new/g    # 替换全文所有old
:%s/old/new/gc   # 替换全文所有old,每次确认

2. 可视模式

v        # 进入字符可视模式
V        # 进入行可视模式
Ctrl+v   # 进入块可视模式

在可视模式下,可以使用移动命令选择文本,然后进行复制(y)、删除(d)等操作。

3. 多文件编辑

缓冲区操作
:ls       # 列出所有缓冲区
:bn       # 下一个缓冲区
:bp       # 上一个缓冲区
:bd       # 删除当前缓冲区
窗口分割
:sp [文件名]   # 水平分割窗口
:vsp [文件名]  # 垂直分割窗口
Ctrl+ww    # 切换窗口
:q         # 关闭当前窗口
标签页
:tabnew [文件名]  # 新建标签页
gt               # 下一个标签页
gT               # 上一个标签页
:tabclose        # 关闭当前标签页

四、Vim高级功能

1. 宏录制

q[a-z]    # 开始录制宏到指定寄存器
q         # 停止录制
@[a-z]    # 执行指定寄存器中的宏
@@        # 重复上次执行的宏

2. 标记与跳转

m[a-z]    # 设置标记
`[a-z]    # 跳转到标记
'.        # 跳转到最后修改的位置

3. 自动补全

Ctrl+n    # 向下选择补全项
Ctrl+p    # 向上选择补全项

五、Vim使用注意事项

  1. 模式意识:时刻注意当前所处的模式,错误的模式会导致意外的编辑结果。

  2. 保存习惯:频繁使用:w保存文件,避免意外丢失编辑内容。

  3. 备份文件:Vim会生成.swp交换文件,非正常退出后可以使用vim -r 文件名恢复。

  4. 编码问题:编辑含中文的文件时,确保编码设置正确:

    :set fileencoding=utf-8
    
  5. 学习曲线:Vim的命令需要时间熟悉,建议每天练习几个新命令。

  6. 配置文件:个性化设置可以保存在~/.vimrc中,如:

    set number      " 显示行号
    syntax on       " 语法高亮
    set tabstop=4   " 制表符宽度
    
  7. 插件管理:谨慎选择插件,过多的插件会影响启动速度和稳定性。

六、Vim配置建议

基础配置(~/.vimrc)

" 基本设置
set nocompatible   " 不使用vi兼容模式
set number         " 显示行号
syntax on          " 语法高亮
set tabstop=4      " 制表符宽度
set shiftwidth=4   " 自动缩进宽度
set expandtab      " 将制表符转换为空格
set autoindent     " 自动缩进" 搜索设置
set incsearch      " 增量搜索
set hlsearch       " 高亮搜索结果
set ignorecase     " 忽略大小写
set smartcase      " 智能大小写匹配" 界面设置
set cursorline     " 高亮当前行
set showmatch      " 显示匹配括号
set laststatus=2   " 总是显示状态栏

实用快捷键映射

" 快速保存
nmap <leader>w :w<CR>" 快速退出
nmap <leader>q :q<CR>" 清除搜索高亮
nmap <silent> <leader>/ :nohlsearch<CR>" 窗口切换
nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

七、学习资源与进阶建议

  1. 内置教程:在终端输入vimtutor可以启动Vim自带的交互式教程。

  2. 帮助系统:Vim内置详尽的帮助文档,使用:help命令查看。

  3. 循序渐进:不要试图一次性掌握所有命令,从基础开始逐步扩展。

  4. 实践应用:在日常编辑任务中坚持使用Vim,实践是最好的学习方法。

  5. 社区资源:参与Vim社区,学习他人的配置和技巧。

Vim的学习曲线虽然陡峭,但一旦掌握,它将极大地提升你的文本编辑效率。记住,成为Vim高手的关键在于持续练习和不断探索。祝你在Vim的世界里编辑愉快!

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

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

相关文章

时序约束高级进阶使用详解三:Create_Clock

目录 一、前言 二、设计示例 2.1 设计代码 2.2 schematic 2.3 no overwriteing 2.4 约束到非时钟引脚 三、Create_clock应用 3.1 时钟输入端口 3.2 7系列高速收发器输出管脚 3.3 部分原语的输出管脚 3.4 主时钟路径上创建主时钟 3.5 虚拟时钟 3.6 差分时钟的约束 …

箱线图(盒须图)QCPStatiBox

一、QCPStatisticalBox 概述 QCPStatisticalBox 是 QCustomPlot 中用于绘制箱线图(盒须图)的类&#xff0c;可以显示数据的五个关键统计量&#xff1a;最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)和最大值&#xff0c;以及可能的异常值。 二、主要属性 属性类型描述…

人形机器人马拉松:北京何以孕育“领跑者”?

“机器人每跑一小步&#xff0c;都是人类科技的一大步”&#xff0c;这句对阿姆斯特朗登月名言的仿写&#xff0c;恰如其分地诠释了全球首场人形机器人半程马拉松赛事的里程碑意义。 2025年4月19日&#xff0c;北京亦庄半程马拉松暨人形机器人半程马拉松圆满结束。在总长21.09…

基于Python的推荐算法的电影推荐系统的设计

标题:基于Python的推荐算法的电影推荐系统的设计与实现 内容:1.摘要 本文围绕基于Python的推荐算法的电影推荐系统展开研究。背景在于随着电影数量的急剧增加&#xff0c;用户在海量电影中找到符合自身喜好的影片变得困难。目的是设计并实现一个高效准确的电影推荐系统&#x…

【深度学习】详解矩阵乘法、点积,内积,外积、哈达玛积极其应用|tensor系列02

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a;【深度学习】你真的理解张量了吗&#xff1f;|标量、向量、矩阵、张量的秩|01每日一言&#x1f33c;: “脑袋想不明白的&#xff0c;就用脚想”…

面试常用基础算法

目录 快速排序归并排序堆排序 n n n皇后问题最大和子数组爬楼梯中心扩展法求最长回文子序列分割回文串动态规划求最长回文子序列最长回文子串单调栈双指针算法修改 分割回文串滑动窗口栈 快速排序 #include <iostream> #include <algorithm>using namespace std;…

相对路径和绝对路径解析

在 Linux/Unix 和文件系统中&#xff0c;绝对路径和相对路径是描述文件或目录位置的两种方式&#xff0c;它们的核心区别在于路径的起点和使用场景。以下是详细对比&#xff1a; 目录 1. 定义与起点 2. 符号与语法 3. 使用场景 4. 实际示例 示例 1&#xff1a;定位文件 示…

【算法数据结构】leetcode37 解数独

37. 解数独 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 题目要求每一行 &#xff0c;每一列&#xff0c;每个3*3 的子框只能出现一次。每个格子的数字范围1-9. 需要遍历每个空格填入可能的数字&#xff0c;并验证符合规则。如果符合就填入&#xff0c;不符…

Vector的学习

vector简介 vector的相关文档对于想深入了解的同学可以参考这个文档进行学习。 vector是表示可变大小数组的序列容器。 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不…

Vue常用指令入门

1. v-for 作用&#xff1a;用于遍历对象或数组 注意&#xff1a;需要提供key属性&#xff0c;可以提高性能和避免渲染错误&#xff0c;值通常为index或item.id <li v-for"(item, index) in items" :key"index">{{ item }} </li>2. v-if,v-el…

在机器视觉检测中为何选择线阵工业相机?

线阵工业相机&#xff0c;顾名思义是成像传感器呈“线”状的。虽然也是二维图像&#xff0c;但极宽&#xff0c;几千个像素的宽度&#xff0c;而高度却只有几个像素的而已。一般在两种情况下使用这种相机&#xff1a; 1. 被测视野为细长的带状&#xff0c;多用于滚筒上检测的问…

线性DP:最长上升子序列(子序列可不连续,子数组必须连续)

目录 Q1&#xff1a;简单遍历 Q2&#xff1a;变式&#xff08;加大数据量&#xff09; Q1&#xff1a;简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 &#xff08;其实质是集合的划分&#xff09;…

【Web前端技术】第二节—HTML标签(上)

hello&#xff01;好久不见—— 做出一个属于自己的网站&#xff01; 云边有个稻草人-个人主页 Web前端技术—本篇文章所属专栏 目录 一、HTML 语法规范 1.1 基本语法概述 1.2 标签关系 二、HTML 基本结构标签 2.1 第一个 HTML 网页 2.2 基本结构标签总结 三、网页开发…

论文降重GPT指令-实侧有效从98%降低到8%

步骤1&#xff1a;文本接收 指令&#xff1a; 请用户提供需要优化的文本内容。 对文本进行初步分析&#xff0c;识别文本的基本结构和风格。 操作&#xff1a; 接收并分析用户提交的文本。 步骤2&#xff1a;文本优化 2.1 连接词处理 指令&#xff1a; 删除或替换连接词&#x…

Jsp技术入门指南【九】详细讲解JSTL

Jsp技术入门指南【九】详细讲解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的准备三、核心标签库常用标签详解1. <c:out>&#xff1a;输出内容&#xff08;替代<% %>&#xff09;2. <c:i…

Linux操作系统--进程的创建和终止

目录 1.进程创建 1.1fork()函数初识 1.2写时拷贝 1. 提升系统效率 2. 隔离错误影响 3. 支持并行计算 2.进程终止&#xff1a; 2.1进程退出场景&#xff1a; 2.2进程常见退出方法&#xff1a; 2.3_exit()系统调用接口 2.4exit函数 2.5return退出 1.进程创建 1.1for…

OSPF综合实验——企业边界路由器、LSA收敛

IP划分粗略记号&#xff0c;方便后续配置 配置IP和环回--->ISP的IP配置和cheat认证---->配置OSPF和RIP---->企业边界路由网段汇总---->特殊区域---> 缺省路由&#xff0c;重分发---->nat配置---->实现全网通 路由器配置IP和环回地址 <Huawei>sys…

Java【网络原理】(4)HTTP协议

目录 1.前言 2.正文 2.1自定义协议 2.2HTTP协议 2.2.1抓包工具 2.2.2请求响应格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3认识方法 2.2.3.1GET与POST 2.2.3.2PUT与DELETE 2.2.4请求头关键属性 3.小结 1.前言 哈喽大家好啊&#xff0c;今天来继续给大家带来Java中网络…

Android学习总结之APK打包流程

一、预处理阶段&#xff08;编译前准备&#xff09; 1. AIDL 文件处理&#xff08;进程间通信基础&#xff09; 流程&#xff1a; 用于实现 Android 系统中不同进程间的通信&#xff08;IPC&#xff09;。在项目构建时&#xff0c;AIDL 编译器会将 .aidl 文件编译为 Java 接口…

BDO分厂积极开展“五个一”安全活动

BDO分厂为规范化学习“五个一”活动主题&#xff0c;按照“上下联动、分头准备 、差异管理、资源共享”的原则&#xff0c;全面激活班组安全活动管理新模式&#xff0c;正在积极开展班组安全活动&#xff0c;以单元班组形式对每个班组每周组织一次“五个一”安全活动。 丁二醇单…