作为一个使用vim挺长时间的人,现在来写这篇东西确实是尴尬的,就像很多大神们说的,vim是世界上最好用的编辑器,没有之一。然后前两天又重新看了看vim的那些功能和使用方法,更觉得这么长时间使用vim却远没有用到它的强大之处。所以这里对常用的vim功能和用法做一个总结,自己时常也能翻看熟悉一下。

看过学习vim使用方法的几条建议,也一并写来警示一下自己吧:学习vim在开始时是痛苦的;需要时间和不断地练习,就像你学习一个乐器一样;不要期望你能在3天内把vim练得比别的编辑器更有效率(像博主这种应该需要两周以上的苦练)。

首先需要说明一下的是,vim有四种基本模式:

1)命令行模式:键入的内容被解释为命令。

2)插入模式:键入的内容被插入文件。

3)可视模式:通过键盘选择、剪切、复制文本。

4)Ex 模式:使用更多命令(例如:存储文件、替换文本等)。

博主最先接触vim的时候,也试图像其他的编辑器一样使用,即进入到插入模式后进行笨拙的操作。而事实上,vim真正强大和快速的地方在于其命令行模式。在真正熟练vim之后会发现,使用插入模式的时间越来越少,而越来越倾向于使用便捷的命令行模式。

一、关于打开关闭和模式切换

可以通过以下命令启动Vim:

$ vim test.txt

然后文档被打开了,但还不能进行编辑,此时 Vim 处在命令行模式。该模式下可以使用键盘执行 Vim 命令。

要插入文本,将光标定位至插入位置(下几节中会说明高效的光标定位方法),然后按 i 进入插入模式。

按 Esc 即可返回命令行模式。

编辑完毕后输入:wq再回车可以保存退出,或者:q!可以不保存退出。

在命令行模式下,有以下一些值得注意的地方:

1):e <path/to/file>  →打开一个文件

2):w  →存盘

3):saveas <path/to/file>  →另存为 <path/to/file>

4):x, ZZ 或 :wq →保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)

5):q! →退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。

6):bn 和 :bp  →在同时打开很多文件时,可通过这两个命令来切换下一个或上一个文件。

二、关于光标移动

Vim 中的确可以使用←↓↑→移动光标,不管是命令行模式下还是插入模式下,然而Vim非常不鼓励大家这么做。因为这样你需要把右手从字母区移动到方向键,严重影响效率。

强烈建议使用hjkl 来移动光标,一个简单的记忆方法是j 就像一个下垂的钩子,是向下移动的。

另外一些在命令行模式下常用的光标移动基本方法包括:

1)0 → 数字零,到行头

2)^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)

3)$ → 到本行行尾

4)g_ → 到本行最后一个不是blank字符的位置。

5)/pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)

还有一些用熟练之后很强大的光标定位功能:

1)NG  →到第 N 行,注意G是大写的

2)gg  →到第一行。

3)G  →到最后一行。

4)w →到下一个单词的开头。

5)e →到下一个单词的结尾。

6)% : 匹配括号移动,包括小中大括号(需要把光标先移到括号上)

7)*和#: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

8)fx:移动光标到当前行的下一个 x 处。x 可以是任意一个字母。

9)tx:和上面的命令类似,但是是移动到 x 的左边一个位置。

10)Fx:和 fx 类似,不过是往回找。

三、删除、撤销与恢复

1)x  →删除光标所在处的字符(X 删除光标前的字符)。

2)d  →代表你将要删除一些内容,在按下 d 之后,搭配移动光标的命令,可指定需要删除的内容。(dW 可以删除至下一个单词,d^ 可以删至行首)

3)dd  →删除整行。

4)cw  →删除并替换当前单词。

5)u  →命令行模式下撤销上一个命令

6)Ctrl+r  →恢复之前撤销的命令。

四、关于可视模式

命令行模式按 v 进入可视模式,该模式下会高亮一些文本,可以通过光标移动选择文本。选定后按 y 可以复制文本,c 可以剪切。之后可以使用 p 在光标后粘贴,P 在光标前。

V 是行选取模式,以行为单位进行选取。

Ctrl+v是块选取模式,可以选取一块矩形区域中的文本。

五、快速移动大段文字

在很明确的知道想拷贝或者剪切什么,其实无需进入可视选择模式。在命令行模式下使用一些快捷操作可以节省更多时间:

1)d{motion}  →剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。

2)y{motion}  →和上面类似,不过是拷贝。

3)c{motion}  →和 d{motion} 类似,不过最后进入插入模式。

4)dd  →剪切当前行。

5)yy  →拷贝当前行。

6)cc  →剪切当前行并且进入插入模式。

7)D  →剪切从光标位置到行尾到剪贴板。

8)Y  →拷贝当前行。

9)C  →和 D 类似,最后进入插入模式。

10)x  →剪切当前字符到剪贴板。

11)s  →和x类似,不过最后进入插入模式。

12)p  →粘贴

13)N<command>  →重复某个命令N次

六、关于搜索和替换

Vim中有类似正则表达式的搜索查找功能,非常好用。命令行模式下,按下 /,输入搜索内容,按下回车即可。n 查找下一处匹配,N 查找上一处。

替换文本需要使用 :s/命令(注意冒号),格式为:[范围]s/[原字符串]/[新字符串]/[参数]。

命令

作用

:s/xxx/yyy/

将当前行中的第一个「xxx」替换为「yyy」

:s/xxx/yyy/g

将当前行中的所有「xxx」替换为「yyy」

:s/xxx/yyy/gc

同上,但每次替换都会询问

:%s/xxx/yyy/g

将整个文件中的所有「xxx」替换为「yyy」

可以用 :g/ 命令匹配字符串(注意冒号),并对每个匹配执行同一操作。格式为:[范围]:g/[模式串]/[命令]。例如:

命令

作用

:g/^#/d

删除所有以「#」打头的行

:g/^$/d

删除所有空行

看过一个总结的很好的思维导图,整张图放在这里看不清,因此按照不同的操作类型拆分成多张图,列在下面了:

Vim使用进阶的更多相关文章

  1. 【转载】vi/vim使用进阶: 指随意动,移动如飞 (二)

    本节所用命令的帮助入口: :help usr_03.txt :help motion.txt :help usr_29.txt :help scroll.txt :help folding 上一篇文章 ...

  2. 【转载】vi/vim使用进阶: 指随意动,移动如飞 (一)

    vi/vim使用进阶: 指随意动,移动如飞 (一) << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help usr_03.txt :help motion.txt :hel ...

  3. vi/vim使用进阶: 文件浏览和缓冲区浏览

    原文:https://blog.easwy.com/archives/advanced-vim-skills-netrw-bufexplorer-winmanager-plugin/ 本节所用命令的帮 ...

  4. vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb

    vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help vimgdb 在UNIX系统最初设计时,有一 ...

  5. vi/vim使用进阶: vimrc初步

    本节所用命令的帮助入口: :help compatible :help mapleader :help map :help autocmd 当vim在启动时,如果没有找到vimrc或gvimrc,它缺 ...

  6. vi/vim使用进阶: 剑不离手 – quickfix

    转载:http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/ 本节所用命令的帮助入口: :help quickfix :he ...

  7. VIM --使用进阶 -- 插件篇 -- YouCompleteMe -- nerdtree

    系统:ubuntu: 资源:https://github.com/ 其他:想了解都要哪些好用的插件,推荐大家读 http://blog.csdn.net/mergerly/article/detail ...

  8. VIM编辑器进阶配置

    vim自定义设置        可以选择需要的功能添加至 ~/.vimrc 打开注释使之生效. " 让 vim 关闭所有扩展的功能,尽量模拟 vi 的行为. set nocompatible ...

  9. vim 编辑器的设置

    vi编辑器的配置:http://blog.mcuol.com/User/fenghua/Article/17411_1.htm ******************************vim ~/ ...

随机推荐

  1. Codeforces Round #222 (Div. 1) D. Developing Game 扫描线

    D. Developing Game 题目连接: http://www.codeforces.com/contest/377/problem/D Description Pavel is going ...

  2. hdoj 5122 K.Bro Sorting 贪心

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Tot ...

  3. Python学习笔记(七)—字典的学习

    总结内容: 1.字典的定义 2.字典的好处 3.字典的增删改查 4.字典常用方法及内置函数 5.字典的多层嵌套 6.字典的循环 7.字典小练习 1.字典的定义 字典是另一种可变容器模型,且可存储任意类 ...

  4. 解决idea 控制台中文乱码

    打开IntelliJ IDEA 14.0安装路径,小编的安装路径为:D:\Program Files\JetBrains\IntelliJ IDEA 14.0\bin 找到idea.exe.vmopt ...

  5. 算法学习 - 平衡二叉查找树实现(AVL树)

    平衡二叉查找树 平衡二叉查找树是非常早出现的平衡树,由于全部子树的高度差不超过1,所以操作平均为O(logN). 平衡二叉查找树和BS树非常像,插入和删除操作也基本一样.可是每一个节点多了一个高度的信 ...

  6. MVC动态添加文本框,后台使用FormCollection接收

    在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,对于前台传来的多个TextBox值,在控制器方法中通过强类型来接收.使用FormCollection也可以接 ...

  7. MFC绘制直方图和饼图

    转载原文: Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNorma ...

  8. 6. python 字符串格式化表达式

    6. python 字符串格式化表达式 字符串格式化允许在一个单个的步骤中对一个字符串执行多个特定类型的替换 特别是给用户提示的时候,格式化非常方便 实现方法: 1.格式化表达式,类似于c语言的pri ...

  9. DevExpress 利用DateEdit 仅显示和选择年份 z

    DevExpress只提供了选择月份的控件MonthEdit,并没提供选择选择年份的控件,目测是官方偷懒不想弄,因为要实现的方法也很简单,利用ComboBoxEdit添加年份数据即可,直接封装一个控件 ...

  10. etcd集群搭建

    etcd介绍,以及适用场景,参考:http://www.infoq.com/cn/articles/etcd-interpretation-application-scenario-implement ...