这个周末被公司拉到一个有山有水有藏獒的荒郊野岭,除了电灯电话、楼上楼下,就没有什么别的了。很多人抱怨条件艰苦,我觉得还好,体会一下原生态的自然风光,与昆虫近距离亲密接触,也算回归自然。郊区的夜让人感觉已入初秋,凉风习习,满天星斗烁烁生辉,周边的山都很低,橘色的月亮就挂在屋脊上,尺寸大的吓人,远远望去,看到如水的月光流淌在低矮的山脊上,明灭闪烁。记不清有多少年没见到过这么好的月光了。
村里的藏獒个顶个身姿挺拔伟岸,看见有人走过偶尔犬吠,大部分时候只是含情脉脉的盯着我们,或者急促的走来走去,估计心里在想,这帮孙子怎么不到这边来玩会?
周日的爬山活动最为搞笑,大家卯足了劲准备登山,没想到一抬脚已经登顶了,站在山包上极目远眺,除了蚊子和我们,没有其他活物,带上去的西瓜也没吃完,结果年轻力壮的小伙又扛了下去,实践证明:扛着西瓜上山并不可怕,上山后吃不了再扛下来才可怕,人生最痛苦的事莫过于此!
自然其实离我们没那么远,离开沙发和书桌,稍微往外走一走就好!
Vim 概念
Vim 系列有很多人催更了,今天就写写 Vim 的基本概念,之后介绍几个使用技巧。
下面我们来介绍一下Vim中的几个基本概念:Buffer(缓冲区)、Window(窗口)和Tab-page(标签页)。
1、Buffer:很多读者问,用 Vim 打开文件后,文件内容存哪了,每次修改都要读写硬盘吗?显然不会每次编辑都写硬盘,事实上Vim打开的文件都会被加载到内存中,在内存中我们使用 Buffer 来描述正在编辑的文件,一个Buffer对应一个被编辑的文件副本。当我们在完成了一个Buffer的编辑后就可以保存该文件。Buffer不仅包含了文件的内容,也记录了该文件的编辑状态等配置信息,比如激活、隐藏、上次编辑行数等。
用Vim可以打开多个文件同时编辑,也可以把不需要的文件关掉,但这时文件副本依然保存在缓冲区中,我们可以通过 :ls
或:buffers
查看这些Buffer,还可以通过类似:buffer n
的方式重新打开文件(n表示Buffer的序号)。当然,我们有更好的方式来处理这些Buffer,那就是CommandTBuffer,要想使用CommandTBuffer,先要安装CommandT插件,请大家记住这个插件的名字,我们以后会用到。
2、Window:是对应Buffer的一个展示窗口。一个Buffer可以对应多个窗口,比如我们可以通过:split filename
或:vsplit filename
命令在多个窗口打开一个文件,当修改某一个窗口的文件时,其他窗口都会同步更新。当然我们也可以在多个窗口打开多个文件,编辑后用:wq
保存退出,但是记住,只要没有最终退出Vim进程,那么这些打开的文件Buffer依然保存在缓存区中,可以随时再次打开。
3、Tab-page:Tab-page就比较容易理解,对应一组窗口,我们可以通过:tabedit filename
在另一个标签页中打开一个文件,在这个标签页中又可以打开多个窗口。
下图可以清晰的表达Buffer、Window和Tab-page的关系:
理解了这三个概念和三者之间的关系,对我们用好Vim有非常大的帮助。
Vim 技巧
1、打开 Vim之后,可以用:split filename
或:vsplit filename
或new filename
横向或纵向切割窗口,使用 ctrl + w可以在个窗口之间跳转,使用 ctrl + 方向键可以按照方向切换窗口。
2、用 Vim 打开一个文件,如果我们想实现所有文本行翻转,那么可以执行如下命令:
:g/^/m 0
3、在 Vim 中统计文本行数和当前光标的位置,可以使用 ctrl + g,统计字节数,可以使用 g + ctrl + g
4、对文本进行简单排序:
用 shift v 选中多行文本,输入 : !sort
,看看效果如何
5、如果你想把当前目录下(包括子文件夹)所有后缀为 java 的文件中的 apache 替换成 eclipse,那么依次执行如下命令: 在当前目录下执行:
vim
:n **/*.java
:argdo %s/apache/eclipse/ge | update
第四个技巧在 Vim 系列第二篇里提到过,今天解释一下,这就用到了buffer 的概念,通过正则表达式在内存中打开多个文件,argdo 表示在内存中执行 Vim 的命令,%s/apache/eclipse/ge
表示在内存中执行字符串替换,g 表示全局替换,e 表示如果文件中没有可替换字符串不报错继续执行,| 是管道标识符,update 表示替换完之后更新并写入文件。
文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· 网站:https://macshuo.com
请教下Mac君,VIM里c键这个快捷键对应的操作是什么?
我看鸟哥的私房菜里说:c:重复删除多个数据,例如向下删除 10 行,[ 10cj ]
可鸟哥举的例子却出现了j这个键,除了10cj这种用法,c这个快捷键还能用在什么地方?
连按两下 C,会删除当前行,并进入 insert 模式
dd也是删除当前行,但不进入插入模式
池老师 ,:g/^/m 0 这条语句我对应的操作了一下 ,但是还是不太明白它的作用、、
:h :g
:g/pattern/cmd
^可以匹配每一行开头 :m 0 将匹配到的每一行依次move 到第0行. 实现了行倒序
池老师指教一下
用 shift v 选中多行文本,输入 : !sort,看看效果如何 这个也没效果
可以排序啊
池老师,如果有可能,建议您给Pythoner将Vim配置成一个富有您自己想法的Python IDE
请问截图里的配色方案叫什么名字?看起来很棒啊