上个周苹果公司悍然发布了新版mac,消灭了功能键,包括ESC,终于使下面这个段子成为了事实:问,如何生成一段随机数?答:让一个非开发人员退出vim。哈哈,现在开发人员是不是也可以产生随机字符串了?发现自己作为一个vim党,竟然对很多vim常用的命令都不知道,今天就记一下笔记,让自己这个vim党称呼实至名归。
首先要说明的是,基本的vim命令像A、I、O进入编辑模式,ESC进入命令模式,“:”进入末行模式,以及常用的什么dd,yy,p等都认为大家已经熟练掌握,就不说了。

  1. 替换字符

:%s/oldchar/newchar/g

这个命令同样可以解决:

注1. 在windows记事本下的文件放到Linux下时,行末多出来一个^M,这个问题,直接把oldchar换成\r,newchar传承空就可以了。
注2. 在windows记事本下的文件放到Linux下时,行末多出来一个^@,这个问题,直接把oldchar换成先摁ctrl+v,然后摁ctrl+2,newchar传承空就可以了。
注3. 在windows记事本下的文件放到Linux下时,行末多出来一个^A,这个问题,直接把oldchar换成先摁ctrl+v,然后摁ctrl+A,newchar传承空就可以了。
注4. oldchar也可以用正则表达式,之前一直不知道怎么在每一行的行末加东西,其实如此简单而已。

  1. 加密文件

进入末行模式,然后输入大写的X,然后输入密码,保存退出即可,这样的话今后每次打开都需要输入密码才行,否则就是一堆乱码。

  1. undo和redo

这个比较简单,undo直接摁u,redo是ctrl+r

  1. 简单的移动光标

0 数字零,到行头  
^ 到本行第一个不是blank字符的位置  
$ 到本行行尾  
g_ 到本行最后一个不是blank字符的位置  
/pattern 搜索 pattern 的字符串,如果搜索出多个匹配,可按n键到下一个  
. (小数点) 可以重复上一次的命令  
N<command> 重复某个命令N次  
:N 到第N行  
gg 到第一行。(陈皓注:相当于1G,或 :1)  
G 到最后一行
  1. 块操作: ctrl-v

块操作,典型的操作: 0、ctrl-v、ctrl-d、I、ESC


^ 到行头  
ctrl-v 开始块操作  
ctrl-d 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)  
I 插入,然后输入  
ESC 来为每一行生效。
  1. 自动提示

在输入模式下,你可以输入一个词的开头,然后按 ctrl-p或是ctrl-n,自动补齐功能就出现了

  1. 可视化选择: v,V,ctrl-v

ctrl-v,我们可以使用 v 和 V。一但被选好了,你可以做下面的事:

J 把所有的行连接起来(变成一行)  
< 或 > 左右缩进  
= 自动给缩进
  1. 窗口分屏浏览

:He 在下边分屏浏览目录  
:He! 在上分屏浏览目录  
:Ve 在左边分屏间浏览目录  
:Ve! 要在右边则是
  1. 多页签(tab page)

在末行模式下,输入:


:tabnew 文件名

注1. 文件名需要全路径;
注2. 文件名可以使用tab键,自动补全

当然也可以用:


:Te 这个比较好记

10.读取Shell命令相关


:r!date 插入日期

上面这个命令,:r 是:read的缩写,!是表明要运行一个shell命令,意思是我要把shell命令的输出读到vim里来。

  1. 字符相关

guu 把一行的文字变成全小写,或是Vu  
gUU 把一行的文件变成全大写,或是VU
  1. 浏览代码

浏览目录的命令很简单:(你也可以直接vim一个目录)


:E 注意,是大写

然后在你看到的界面中,你可以用 j, k 键上下移动,然后回车,进入一个目录,或是找开一个文件。你也可以用下面这一堆命令:


– 到上级目录  
D 删除文件(大写)  
R 改文件名(大写)  
s 对文件排序(小写)  
x 执行文件

当然,打开的文件会把现有已打开的文件给冲掉——也就是说你只看到了一个文件。
如果你要改变当前浏览的目录,或是查看当前浏览的目录,你可以使用和shell一样的命令:


:cd <dir> – 改变当前目录  
:pwd – 查看当前目录
  1. vim的终级插件

CentOS下:yum erase emacs  
Ubuntu下:apt-get remove emacs

2017-03-16补充:

14 文本字符串次数统计

例如统计bridgeli出现的次数


:%s/bridgeli//gn