如何高效使用vim
Vim 是一款文本编辑器,被称为编辑器之神,非常适合在shell 中编辑代码,熟练的使用Vim,可以让你高效的编写代码。
Vim 是Vi 的增强版,所有的类Unix 系统,都自带这两个工具,这两个工具中使用较多的也是Vim。
Vim 中有很多命令,本文并不打算介绍所有的命令,只介绍常用实用的命令,熟练使用这些命令,就可以快速的编写代码。
1,Vim 的三种模式
vim 中有三种模式,分别是普通模式,编辑模式,可视模式。
其实,还有一种模式是命令模式,这里我将命令模式 归入到了普通模式中,并没有单独将命令模式拿出来。其实命令模式 就是在普通模式下输入一个冒号:加一个命令。
其中可视模式 又分为行可视 和列可视,如下:
vim 模式
├── 普通模式
├── 编辑模式:可向文件中输入内容
└── 可视模式
├── 行可视:按行选中某块区域
└── 列可视:按列选中某块区域
它们之间的转换如下所示:

vim + 文件名打开文件进入普通模式普通模式输入i或o或a进入编辑模式普通模式输入Ctrl + v进入列可视普通模式输入Shift +v进入行可视- 其它模式输入
Esc返回普通模式
下面介绍每个模式支持的常用命令。
2,普通模式
在普通模式下,可以使用下面这些命令,普通模式的命令最多。
2.1,如何进入编辑模式
使用以下命令进入编辑模式:
| 命令 | 含义 |
|---|---|
i |
在当前光标前位置进入编辑模式 |
a |
在当前光标后位置进入编辑模式 |
o |
在当前光标下一行进入编辑模式 |
2.2,如何移动光标
使用以下命令移动光标:
| 命令 | 含义 |
|---|---|
k或方向键↑ |
向上移动,建议使用k |
j或方向键↓ |
向下移动,建议使用j |
h或方向键← |
向左移动,建议使用h |
l或方向键→ |
向右移动,建议使用l |
^ |
移动到当前行第一个可见字符 |
0或者Home键 |
移动到当前行开头 |
$或者End键 |
移动到当前行最后 |
% |
在两个匹配的{}[]()<>之间移动 |
w |
向后移动一个单词 |
b |
向前移动一个单词 |
gg |
移动到当前文件的第一行 |
G |
移动到当前文件的最后一行 |
M |
移动到当前文件的中间一行 |
Ctrl + o |
移动到上一次编辑的地方 |
:+数字N |
输入一个:,再输入一个数字,按回车,快速跳到某一行 |
2.3,如何删除/复制/粘贴
使用以下命令删除/复制/粘贴:
| 命令 | 含义 |
|---|---|
dd |
删除光标所在的行,并且内容在剪切板 |
yy |
复制光标所在的行,并且内容在剪切板 |
dw |
删除光标所在的单词,并且内容在剪切板 |
x |
删除光标所在的一个字符,并且内容在剪切板 |
D |
删除光标到行末尾所有的内容,并且内容在剪切板 |
p |
粘贴剪切板的内容到光标处 |
2.4,如何进行搜索
使用以下命令在当前文件中搜索:
| 命令 | 含义 |
|---|---|
* |
光标停留在某个字符串时,*可以在当前文件中搜索这个字符串 |
/+字符串+回车 |
在当前页面搜索这个字符串 |
n |
锁定到下一个匹配的字符串 |
N |
锁定到上一个匹配的字符串 |
:set hlsearch |
让所有匹配的字符串高亮 |
:set noh |
取消字符串高亮 |
2.5,如何进行分屏
vim 分屏:
| 命令 | 含义 |
|---|---|
:vsp + 文件名 |
横向分屏 |
:sp + 文件名 |
竖向分屏 |
Ctrl + ww |
锁定到下一个屏 |
退出命令 |
使用退出命令,退出当前屏 |
2.6,如何退出文件
退出命令如下:
| 命令 | 含义 |
|---|---|
:wq |
保存并退出当前文件 |
:w |
保存当前文件 |
:q |
退出当前文件 |
:qa |
退出打开的所有文件 |
:q! |
强制退出(不保存) |
2.7,如何进入可视模式
进入可视模式:
| 命令 | 含义 |
|---|---|
Shift + v |
进入行可视模式 |
Ctrl + v |
进入列可视模式 |
2.8,其它
| 命令 | 含义 |
|---|---|
u |
撤销上一次操作 |
Ctrl + r |
反撤销操作 |
~ |
英文字符大小写转换 |
:%s/x/y/g |
将当前文件中所有的x换成y |
数字 + == |
用于格式化代码,比如先输入一个999,再输入==,从当前行开始,以下999 行代码都会格式化 |
:set nu |
显示行号 |
:set nonu |
关闭行号 |
3,编辑模式
在编辑模式下可以使用下面命令。
| 命令 | 含义 |
|---|---|
Ctrl + n |
搜素下一个变量名,函数自动补全 |
Ctrl + p |
搜索上一个变量名,函数自动补全 |
Shift + Insert |
在当前光标插入系统剪切板的内容 |
4,行可视模式
在行可视模式下可以使用下面命令。
| 命令 | 含义 |
|---|---|
k或方向键↑ |
向上选中多行 |
j或方向键↓ |
向下选中多行 |
d |
删除选中的区域内容,并且内容在剪切板 |
y |
复制选中的区域内容,并且内容在剪切板 |
p |
粘贴剪切板中的内容 |
> |
将选中的区域向右缩进 |
< |
将选中的区域向左缩进 |
5,列可视模式
在列可视模式下可以使用下面命令。
| 命令 | 含义 |
|---|---|
k或方向键↑ |
向上选中多行 |
j或方向键↓ |
向下选中多行 |
h或方向键← |
向左选中多列 |
l或方向键→ |
向右选中多列 |
d |
删除选中的区域内容,并且内容在剪切板 |
y |
复制选中的区域内容,并且内容在剪切板 |
p |
粘贴剪切板中的内容 |
> |
将选中的区域向右缩进 |
< |
列可视模式下不支持 |
以上讲到的命令需要多使用才能熟练,所谓孰能生巧。
如果你想配置Vim 插件 的话,建议不需要配置多么花哨复杂的插件,简单实用就好。
注意,在使用Vim 的时候,鼠标基本是没有什么用的,所以这时可以忘记鼠标的存在,只有键盘。
另外,vimdiff 命令可以对比多个文件的不同,如下所示,打开两个文件(也可打开多个文件):
vimdiff 1.c 2.c

这里还有一个Vim 小游戏 ------《Vim 大冒险》,很有创意的一个小游戏,可以锻炼使用Vim,感兴趣的可以玩一下。
6,Vim 命令速查表
最后附上两张Vim 命令速查表,自行选择,各取所需。
图一:

图二: PDF版在这里。

(完。)
如何高效使用vim的更多相关文章
- vim深入研究
About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...
- [No000018B]写代码要用 Vim,因为越难入门的工具回报越大
编者按:现在的技术界有一种倾向,将软件/应用操作简单化,用户能轻松上手.但是工具是否强大,取决于它能否灵活地满足使用者的各种需要.有些工具虽然很难入门,学会了便能对自己的操作有更深的层次的了解,能赋予 ...
- vim 图册
网上看到的一些图,感觉不错,分享一下 我现在感觉配置文件,很多没有必要,反而很花哨,但是这些基础的东西,反而很高效,实在 VIM的列编辑操作 删除列 1.光标定位到要操作的地方. 2.CTRL+v 进 ...
- vim和emacs
vim和emacs 在编程界一直有两大神器的传说.这两大神器一个是emacs,一个是vim.一个是神的编辑器,一个是编辑器之神. 程序员的圈子里面也一直流传着一个段子,说是世界上的程序员分为三种.使用 ...
- Unix及类Unix系统文本编辑器的介绍
概述 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Em ...
- VI编辑器学习笔记
VIM的使用 VI是Linux系统中的一种编辑器,它的使用方法和界面与Unix平台十分相似,掌握了VIM的特殊,你可以感觉到它强大的功能与高效.Vim 相对来说较小,无论你使用任何Linux系统,你总 ...
- 80%的人都不会的,15个Linux实用技巧
熟悉 Linux 系统的同学都知道,它高效主要体现在命令行.通过命令行,可以将很多简单的命令,通过自由的组合,得到非常强大的功能. 命令行也就意味着可以自动化,自动化会使你的工作更高效,释放很多手工操 ...
- 七个高效的文本编辑习惯(以Vim为例)
七个高效的文本编辑习惯 如果你花很多时间输入纯文本.写程序或HTML,那么通过高效地使用一个好的编辑器,你可以节省大部分时间.本文将提供指导和提示,让你更迅速地做这些工作,并且少犯错误. 本文用开源文 ...
- 高效vim插件
目录[-] 高效vim插件 插件管理利器 高效插件集 NerdTree snipMate tagbar jedi-vim eclim c.vim vim-colorschemes vim配置 一个实例 ...
随机推荐
- Babel快速入门
作者:姜瑞涛 Github仓库:https://github.com/jruit/babel-tutorial 博客:姜瑞涛的官方网站 原文链接:https://www.jiangruitao.com ...
- 详细解析kafka之 kafka消费者组与重平衡机制
消费组组(Consumer group)可以说是kafka很有亮点的一个设计.传统的消息引擎处理模型主要有两种,队列模型,和发布-订阅模型. 队列模型:早期消息处理引擎就是按照队列模型设计的,所谓队列 ...
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- CSAPP实验——DataLab
任务:按照要求补充13个函数,会限制你能使用的操作及数量 bitXor(x,y) 只使用 ~ 和 & 实现 ^ tmin() 返回最小补码 isTmax(x) 判断是否是补码最大值 allOd ...
- vue中使用阿里图标库iconfont和在旧有的iconfont中添加新的图标
第一步 下载样式http://www.iconfont.cn/选择图表,点击加入购物车 第二步 解压下载文件 第三步 修改文件名称 与 iconfont.css 名路径 第四步 将@font-face ...
- .net core 集成 sentry 进行异常报警
.net core 集成 sentry 进行异常报警 Intro Sentry 是一个实时事件日志记录和汇集的平台.其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈.它分为客户端和 ...
- PTA | 1005 继续(3n+1)猜想 (25分)
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- mpvue中使用flyjs全局拦截
mpvue全局属性设置,在我之前的文章中有介绍,今天想记录的就是怎么和Fly.js结合使用来实现全局拦截功能: 首先我们要安装好Flyio,在mpvue项目中我们用npm下载安装: npm insta ...
- PTA 6-1 单链表逆转
本题是一个非常经典的题目:单链表逆转. 这是链表结点的定义: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储 ...
- 30 HashSet
/* * 使用HashSet存储字符串并遍历 * * Set的特点: * 无序(存储和读取的顺序可能不一样) * 不允许重复 * 没有整数索引 于List正好相反 */ public class Ha ...