上个周苹果公司悍然发布了新版mac,消灭了功能键,包括ESC,终于使下面这个段子成为了事实:问,如何生成一段随机数?答:让一个非开发人员退出vim。哈哈,现在开发人员是不是也可以产生随机字符串了?发现自己作为一个vim党,竟然对很多vim常用的命令都不知道,今天就记一下笔记,让自己这个vim党称呼实至名归。
首先要说明的是,基本的vim命令像A、I、O进入编辑模式,ESC进入命令模式,“:”进入末行模式,以及常用的什么dd,yy,p等都认为大家已经熟练掌握,就不说了。
- 替换字符
:%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也可以用正则表达式,之前一直不知道怎么在每一行的行末加东西,其实如此简单而已。
- 加密文件
进入末行模式,然后输入大写的X,然后输入密码,保存退出即可,这样的话今后每次打开都需要输入密码才行,否则就是一堆乱码。
- undo和redo
这个比较简单,undo直接摁u,redo是ctrl+r
- 简单的移动光标
0 数字零,到行头
^ 到本行第一个不是blank字符的位置
$ 到本行行尾
g_ 到本行最后一个不是blank字符的位置
/pattern 搜索 pattern 的字符串,如果搜索出多个匹配,可按n键到下一个
. (小数点) 可以重复上一次的命令
N<command> 重复某个命令N次
:N 到第N行
gg 到第一行。(陈皓注:相当于1G,或 :1)
G 到最后一行
- 块操作: ctrl-v
块操作,典型的操作: 0、ctrl-v、ctrl-d、I、ESC
^ 到行头
ctrl-v 开始块操作
ctrl-d 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I 插入,然后输入
ESC 来为每一行生效。
- 自动提示
在输入模式下,你可以输入一个词的开头,然后按 ctrl-p或是ctrl-n,自动补齐功能就出现了
- 可视化选择: v,V,ctrl-v
ctrl-v,我们可以使用 v 和 V。一但被选好了,你可以做下面的事:
J 把所有的行连接起来(变成一行)
< 或 > 左右缩进
= 自动给缩进
- 窗口分屏浏览
:He 在下边分屏浏览目录
:He! 在上分屏浏览目录
:Ve 在左边分屏间浏览目录
:Ve! 要在右边则是
- 多页签(tab page)
在末行模式下,输入:
:tabnew 文件名
注1. 文件名需要全路径;
注2. 文件名可以使用tab键,自动补全
当然也可以用:
:Te 这个比较好记
10.读取Shell命令相关
:r!date 插入日期
上面这个命令,:r 是:read的缩写,!是表明要运行一个shell命令,意思是我要把shell命令的输出读到vim里来。
- 字符相关
guu 把一行的文字变成全小写,或是Vu
gUU 把一行的文件变成全大写,或是VU
- 浏览代码
浏览目录的命令很简单:(你也可以直接vim一个目录)
:E 注意,是大写
然后在你看到的界面中,你可以用 j, k 键上下移动,然后回车,进入一个目录,或是找开一个文件。你也可以用下面这一堆命令:
– 到上级目录
D 删除文件(大写)
R 改文件名(大写)
s 对文件排序(小写)
x 执行文件
当然,打开的文件会把现有已打开的文件给冲掉——也就是说你只看到了一个文件。
如果你要改变当前浏览的目录,或是查看当前浏览的目录,你可以使用和shell一样的命令:
:cd <dir> – 改变当前目录
:pwd – 查看当前目录
- vim的终级插件
CentOS下:yum erase emacs
Ubuntu下:apt-get remove emacs
2017-03-16补充:
14 文本字符串次数统计
例如统计bridgeli出现的次数
:%s/bridgeli//gn