Vim 是一款文本编辑器,被称为编辑器之神,非常适合在shell 中编辑代码,熟练的使用Vim,可以让你高效的编写代码。

Vim 是Vi 的增强版,所有的类Unix 系统,都自带这两个工具,这两个工具中使用较多的也是Vim

Vim 中有很多命令,本文并不打算介绍所有的命令,只介绍常用实用的命令,熟练使用这些命令,就可以快速的编写代码。

1,Vim 的三种模式

vim 中有三种模式,分别是普通模式编辑模式可视模式

其实,还有一种模式是命令模式,这里我将命令模式 归入到了普通模式中,并没有单独将命令模式拿出来。其实命令模式 就是在普通模式下输入一个冒号:加一个命令

其中可视模式 又分为行可视列可视,如下:

vim 模式
├── 普通模式
├── 编辑模式:可向文件中输入内容
└── 可视模式
├── 行可视:按行选中某块区域
└── 列可视:按列选中某块区域

它们之间的转换如下所示:

  • vim + 文件名 打开文件进入普通模式
  • 普通模式 输入ioa 进入编辑模式
  • 普通模式 输入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的更多相关文章

  1. vim深入研究

    About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...

  2. [No000018B]写代码要用 Vim,因为越难入门的工具回报越大

    编者按:现在的技术界有一种倾向,将软件/应用操作简单化,用户能轻松上手.但是工具是否强大,取决于它能否灵活地满足使用者的各种需要.有些工具虽然很难入门,学会了便能对自己的操作有更深的层次的了解,能赋予 ...

  3. vim 图册

    网上看到的一些图,感觉不错,分享一下 我现在感觉配置文件,很多没有必要,反而很花哨,但是这些基础的东西,反而很高效,实在 VIM的列编辑操作 删除列 1.光标定位到要操作的地方. 2.CTRL+v 进 ...

  4. vim和emacs

    vim和emacs 在编程界一直有两大神器的传说.这两大神器一个是emacs,一个是vim.一个是神的编辑器,一个是编辑器之神. 程序员的圈子里面也一直流传着一个段子,说是世界上的程序员分为三种.使用 ...

  5. Unix及类Unix系统文本编辑器的介绍

    概述 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Em ...

  6. VI编辑器学习笔记

    VIM的使用 VI是Linux系统中的一种编辑器,它的使用方法和界面与Unix平台十分相似,掌握了VIM的特殊,你可以感觉到它强大的功能与高效.Vim 相对来说较小,无论你使用任何Linux系统,你总 ...

  7. 80%的人都不会的,15个Linux实用技巧

    熟悉 Linux 系统的同学都知道,它高效主要体现在命令行.通过命令行,可以将很多简单的命令,通过自由的组合,得到非常强大的功能. 命令行也就意味着可以自动化,自动化会使你的工作更高效,释放很多手工操 ...

  8. 七个高效的文本编辑习惯(以Vim为例)

    七个高效的文本编辑习惯 如果你花很多时间输入纯文本.写程序或HTML,那么通过高效地使用一个好的编辑器,你可以节省大部分时间.本文将提供指导和提示,让你更迅速地做这些工作,并且少犯错误. 本文用开源文 ...

  9. 高效vim插件

    目录[-] 高效vim插件 插件管理利器 高效插件集 NerdTree snipMate tagbar jedi-vim eclim c.vim vim-colorschemes vim配置 一个实例 ...

随机推荐

  1. 使用 nodejs 对文件进行批量重命名

    0. 前言 从B站下载了一点视频,硕鼠自动将标题添加到了每个文件名的前面,导致文件名过长,不方面查看文件的具体内容. 虽然只有二十几个文件,但是手动删除前缀还是个不小的工作量,还有可能删除错误.考虑到 ...

  2. 【cs224w】Lecture 5 - 谱聚类

    Spectral Clustering 前面的课程说到了 community detection 并介绍了两种算法.这次来说说另外一类做社区聚类的算法,谱聚类.这种算法一般分为三个步骤 pre-pro ...

  3. 手写一个Promise/A+,完美通过官方872个测试用例

    前段时间我用两篇文章深入讲解了异步的概念和Event Loop的底层原理,然后还讲了一种自己实现异步的发布订阅模式: setTimeout和setImmediate到底谁先执行,本文让你彻底理解Eve ...

  4. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  5. vue引入echart Error in mounted hook: "ReferenceError: myChart is not defined" found in

    解决办法: // 实例化echarts对象 var/let myChart = echarts.init(this.$refs.myChart)

  6. redis持久化(RDB、AOF、混合持久化)

    redis持久化(RDB.AOF.混合持久化) 1. RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis ...

  7. pyecharts数据可视化模块

    目录 安装 柱状图-Bar 饼图-Pie 箱体图-Boxplot 折线图-Line 雷达图-Rader 散点图-scatter 我们都知道python上的一款可视化工具matplotlib,而前些阵子 ...

  8. 这个案例写出来,还怕跟面试官扯不明白 OAuth2 登录流程?

    昨天和小伙伴们介绍了 OAuth2 的基本概念,在讲解 Spring Cloud Security OAuth2 之前,我还是先来通过实际代码来和小伙伴们把 OAuth2 中的各个授权模式走一遍,今天 ...

  9. django禁用csrf

    django禁用csrf 函数试图 from django.views.decorators.csrf import csrf_exempt @csrf_exempt def your_func_vi ...

  10. Android Visibility控件显示和隐藏

    Android控件显示和隐藏 visibility 可见(visible) XML文件:android:visibility="visible" Java代码:view.setVi ...