作为一个使用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. 更好的浏览器动画实现 requestAnimationFrame

    requestAnimationFrame 是专门为实现高性能的帧动画而设计的一个API: js一般是借助setTimeout或setInterval这两个函数实现动画,性能不佳. css3动画,性能 ...

  2. Python环境右键定制

    有时候,我们需要将py打包成exe.需要将ui转换成py.需要将py转换成pyc等等,命令行操作起来有点繁琐.所以做了这个教程: 1. py打包成exe 先安装cx_freeze,参照教程:http: ...

  3. BZOJ 2756: [SCOI2012]奇怪的游戏 网络流/二分

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1594  Solved: 396[Submit][Stat ...

  4. centos7安装kafka_2.11-1.0.0 新手入门

    系统环境 1.操作系统:64位CentOS Linux release 7.2.1511 (Core) 2.jdk版本:1.8.0_121 3.zookeeper版本:zookeeper-3.4.9. ...

  5. redis学习之一 - linux下安装配置

    Content 0.序 1.如何安装? 2.配置参数及其意义 3.设为linux服务 0.序 本文主要是记录Redis在 Centos下的安装配置 .文中如无特别说明.表示redis-3.2.10代码 ...

  6. 分频器VHDL描述

    在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号.我们知道,在硬件电路设计中时钟信号时非常重要的.    下面我们介绍分频器的VHDL描述,在源代码中完成对时钟信号CLK的2分 ...

  7. Tasker to detect application running in background

    We used to be told that tasker is only capable of detecting foreground application, if the app gets ...

  8. datagrid在MVC中的运用05-加入时间搜索条件,枚举填充下拉框

    本文主要来体验在搜索区域增加更多的搜索条件,主要包括: ※ 使用jQuery ui的datepicker显示时间,设置显示格式.样式. ※ 设置jQuery ui的onClose事件,使开始和结束时间 ...

  9. ubuntu 添加CDROM安装源

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  10. 【linux】linux查看文件大小,磁盘大小

    查看指定目录下 文件或目录大小超过多少的 查看 /backup/tomcat7/ 目录下 超过500M大小的文件 并展示 文件详情 find /backup/tomcat7/  -type f -si ...