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. 写给小白看的入门级 Java 基本语法,强烈推荐

    之前写的一篇我去阅读量非常不错,但有一句留言深深地刺痛了我: 培训班学习半年,工作半年,我现在都看不懂你这篇文章,甚至看不下去,对于我来说有点深. 从表面上看,这句话有点讽刺我的文章写得不够通俗易懂的 ...

  2. 关于git你日常工作中会用到的一些东西

    前言 git是一个版本控制工具, 版本控制主要的好处有三点: 从当前版本回退到任意版本 查看历史版本 对比两个版本差异 git 相关术语 repository 仓库 branch 分支 summary ...

  3. .NET Core项目部署到Linux(Centos7)(二)环境和软件的准备

    目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...

  4. 从一个慢查询到MySQL字符集编码

    从一个慢查询到MySQL字符集编码 目录 从一个慢查询到MySQL字符集编码 1. 问题起源 2. MySQL字符集和字符集排序规则 2.1 字符集相关概念 2.2 MySQL中的字符集和字符集排序规 ...

  5. Pytest系列(13)- 重复执行用例插件之pytest-repeat的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常在做功能测试的时候,经常 ...

  6. docker-compose中redis查询版本

    1.查询CONTAINER ID docker ps 2.进入容器,查询版本号信息 docker exec -it CONTAINER ID /bin/bash 3.查询到redis中的redis-s ...

  7. javascript 入门 之select2获取远程数据

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta lan ...

  8. javascript 入门 select2

    要说这select2,还真是我......,也不是难,反正就对不了!!! 我博客看了一下牛,愣是对不了,后来硬着头看着官方文档,终于出来了. 注意: 1.调用的jquery库一定要能用,网上很多不能用 ...

  9. Linux 磁盘管理篇(一 磁盘分区)

    显示系统所有分区内容            fdisk 分区工具                parted fdisk: 执行完后按下 q 是退出不保存操作的意思 执行完后按下 w 是执行操作的意思 ...

  10. String 对象-->replace() 方法

    1.定义和用法 replace() 方法用于字符串替换 语法: string.replace(searchvalue,newvalue) 参数: searchvalue:被替换的字符串 newvalu ...