Vim求生
[TOC]
Vim 是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。
—— 维基百科
很多接触 Vim 的程序员应该都有过这样的经历:
- 受某大 V 的影响看到了 Vim 的高逼格;
- 看了某篇学习的文章,自己试了几个命令,在 30 分钟内放弃;
- 几个月后、几年后又听到有人在鼓吹 Vim 好用;
- 循环。。。
- 忍不了了,花了 2 周时间记各种命令;
- 算了,我还是滚回我的 sublime 吧。
我为什么知道这种情况?因为我也一遍有一遍的尝试想把 Vim 作为我的主力编辑器,每一次都是伤痕累累的滚回 sublime 了。分析这里面的原因其实只有一个:我太想用它来装 X 了,太想感受那种轻飘飘的虚荣感觉,还没有认识到“世界上有 3 类程序员:用 Vim 的程序员,用 Emacs 的程序员,用其他编辑器的程序员” 这句话并不是装出来的,Vim 真的可以大幅提高工作效率。
如果一个工具真的可以在以后长时间内大幅提高效率,那么花一小点时间,慢慢的使用、进阶绝对是个划得来的生意。而且,有时候我们不得不在生产环境中直接面对 Vim, 这种时候通常是紧急的情况(服务器发生故障等),如果对 Vim 不熟悉,那只能是两眼一抹黑了。
大部分人放弃 Vim 可能都是出于这样的原因:期望过高,追求速成。而本文的目的只在于善意的提醒你:慢一点,别放弃。
生存下来
追求速成的同学在初次接触 Vim 时通常活不过 30 分钟,太不友好了!!!那为什么 Vim 可以提高工作效率?它的设计初衷就可以让你的手指不离开键盘进行所有的操作。
活下来需要注意的事情很简单,认清 Vim,使用最简单的指令,就跟我们学吉他一样,先看看买的琴,弄清楚 Do Rei Mi 在哪个地方可以演奏出来就可以了,通常来说我们要流畅的弹出 1 2 3 4 5 6 7 i
需要一段时间,但是第一次弹奏出来以后会很开心。这个时候并不需要了解什么是把位,怎么切换把位。
通过 vim filename
进入 Vim 以后,不能编辑文本,这时候 Vim 在 Normal 模式下。正如一些笔记软件默认是不开放编辑的,只有点了编辑按钮才能输入,而像 Sublime 这样的编辑器,你只要打开了某个文件,随时都可以输入。这样当然提供了便利性,但是很容易造成误操作,改变文件内容和状态。
- 如果需要编辑,键盘按
i
就可以进入 Insert 模式,i
你可以理解为是此模式的缩写。此时下面会出现插入
字样; - 在 Insert 模式下,可以像笔记软件那样编辑文件内容;
- 通过
Esc
退出 Insert 模式,回到 Normal 模式
在 Normal 模式下,学会以下内容就入门了:
i
进入 insert 模式,编辑内容;- 光标键(←↓↑→) 进行移动;
- 删除光标位置的字符:
x
- 删除光标那一整行:
dd
- 粘贴已复制的内容:
p
- 保存(w)+退出(q):
wq
基本上以上操作足以让我们完成很多的操作内容,现阶段需要做的是将这些指令训练成肌肉记忆,可以每天刻意用 Vim 来写日记,编辑一些文档,或者训练不用自动补全和提示写代码的能力。
稍微熟练以后将光标键换成hjkl
进行移动,这样更符合手放在键盘上的位置,如果不记得哪个键是做什么用的,输入:help 键名
寻求帮助。养成一个习惯,insert 模式下编辑完,只要有可能做其他事情,有事没事按按 Esc
退回 Normal 模式来保证数据的安全。如果有必要,借助鼠标操作。
快速定位阶段
在生存阶段的命令没有到肌肉记忆的程度时,尽量不要逼自己学习过多的命令,欲速则不达,好东西都需要慢慢享受。Vim 在 Normal 模式下,所有键都会变成命令执行对应的指令。
光标的快速移动
^
行首;$
行尾;:3
跳到第 3 行;G
跳到最后一行;:/string
定位文字,string
就是要定位的文字,可以是正则表达式。当查找到多个结果时,n
键切换到下一个;w
下一个单词首;*
下一个相同的单词,#
上一个相同的单词;%
专门用来匹配括号的。编程语言很多不知道自己处于哪一个括号内。
多种插入形式
之前我们说过 i
可以切换到 insert 模式,实际上还有其他键也可以:
a
在光标后一位插入,通常用在行末的时候;o
在下一行插入;O
在上一行插入;
文件操作
除了 :wq
还有其他操作:
:q!
不保存强制退出;:w path_of_filename
保存为 filename 的文件;:saveas path_of_filename
另存为;:e another_file
打开另一个文件::n 或者加file/tab键观察
打开下一个文件,如果加 file 开指定的文件,可以用 tab 键观察补全
快速回撤前进
u
undo,回撤Ctrl + r
redo,前进.
做大量重复工作的利器,表示执行上一个指令;5.
重复执行上一个指令 5 次;5<command>
重复执行 command 这个指令 5 次
熟练阶段
到目前为止,主流编辑器的基本功能 Vim 通过键盘基本上都实现了,对于块级操作,命令存在天然的劣势,毕竟鼠标长按一下可以选择太多的区域,Vim 的块级操作同样不复杂:
Ctrl + v
进入块级操作;- 光标移动,光标键或者其他命令;
I + --
, 操作。I
进入插入模式,插入--
;
命令 v 和 V 表示可视选择,如果我们需要对一段代码左右缩进:
- v 进入可视;
- 光标移动,光标键或者其他命令;
> 或者 <
, 分别表示右缩进和左缩进
在 insert 模式下,可以使用 ctrl + p
自动补全。
分割布局
:vs file
水平开一个文件:sp file
垂直开一个文件
封神阶段
用 Vim 打造 IDE
宏录制
这个阶段我直接放弃了。不行了,白头发出来了。
可自行搜索。。。
总结
- 学些 Vim 的过程真可谓酸爽;
- 一个命令用熟练了感动得眼泪掉下来;
- 很多枯燥的东西都是有大用处的,这时候能狠下心来啃对自己的心智也是个大的提升;
- 虽然离 Vim 党还有距离,可怎么感觉自己不一样了呢?有懂这种体会的吗?
学习资料
Vim求生的更多相关文章
- 如何创建Vim Dotfile?
Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...
- 玩转Vim 编辑器
一:VIM快速入门 1.vim模式介绍 以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数 ...
- vim安装中文帮助手册
安装方法: 在下面的网站下载中文帮助的文件包:$wget http://nchc.dl.sourceforge.net/sourceforge/vimcdoc/vimcdoc-1.5.0.tar. ...
- vim环境变量配置、背景色配置
我们使用vi或者vim的时候,如果想要显示行号,可能会这样做:切换到命令模式,然后输入set nu,再按回车键就显示了:还有就是咱们在编写程序的时候,有的时候会希望按下回车键后,光标不是每次都在行首, ...
- vim+vundle配置
Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用.一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能.一般流程都是下载需要的工具,然 ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- VIM教程
vim 的环境设定参数 :set nu :set nonu 就是设定与取消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 ...
- 在 Linux 打造属于自己的 Vim
Linux 系统中很多东西都是以脚本代码.配置文件的形式存在,使用 Linux 系统时,需经常对这些文件进行编辑.很显然,如果没有文本编辑器,江湖之路寸步难行. 我的选择是 Vim.Vim 是 Lin ...
- 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE
C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...
随机推荐
- ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)
A.Arcade Game(康拓展开) 题意: 给出一个每个数位都不同的数n,进行一场游戏.每次游戏将n个数的每个数位重组.如果重组后的数比原来的数大则继续游戏,否则算输.如果重组后的数是最大的数则算 ...
- 如何获取iframe DOM的值
在Web开发时,很多时候会遇到一个问题.我在一个页面嵌入了iframe,并且我想获得这个iframe页面某个元素的值.那么该如何实现这个需求呢? 先来看下演示: 效果演示 iframe1中文本框的值: ...
- git使用笔记(四)远程操作
By francis_hao Nov 19,2016 以一张图说明远程操作,图片来自参考[2] git clone 从远端主机克隆一个版本库,若省略directory则生成一个和远端同名的版本库 ...
- Maven如何打包本地依赖包
有的jar包,在maven中心库里面是没有的,那么,如何在项目中使用呢? 假设我们需要使用:apache-ant-zip-2.3.jar 将该jar包,放在项目的lib目录,例如: 在pom.xml里 ...
- fieldset——一个不常用的HTML标签
fieldset 标签 -- 对表单进行分组 在form表单中,我们可以对form中的信息进行分组归类,如注册表单的form,我们可以将注册信息分组成 基本信息(一般为必填) 详细信息(一般为可选) ...
- 在eclipse中使用JUnit4,以及使用JUnit4进行单元测试的技巧
一 在eclipse中使用JUnit4 首先在工程上右键,选择属性,找到Java Builder Path,添加JUnit4的lib,如下图: 在要测试的类上右键新建 Junit test cas ...
- 转:极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
转自:极小极大搜索方法.负值最大算法和Alpha-Beta搜索方法 1. 极小极大搜索方法 一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通 ...
- vue 数组、对象 深度拷贝和赋值
由于此对象的引用类型指向的都是一个地址(除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝) 数组: let a = [11,22,33]; let b = a; / ...
- 一致性hash与CRUSH算法总结
相同之处:都解决了数据缓存系统中数据如何存储与路由. 不同之处:区别在于虚拟节点和物理节点的映射办法不同 由于一般的哈希函数返回一个int(32bit)型的hashCode.因此,可以将该哈希函数能够 ...
- Linux中实现一个简单的进度条【转】
转自:http://blog.csdn.net/yuehailin/article/details/53999288 说起进度条,其实大家常常见到,比如说你在下载视频或文件的时候,提示你当前下载进度的 ...