VIM is "Vi IMproved"
介绍vim之前,先介绍下vi
vi是一款由加州大学伯克利分校,Bill Joy 研究开发的文本编辑器
如果再往前追根溯源,能从vi的操作中看出流编辑器ed的身影
vi是一款模式编辑器,有一下三种模式:
vim 是vi的衍生版本,在vi的基础上改进和增加了很多特性 vi的衍生版本有很多,但是vim是这些版本中易用性最好,可扩展度高,用户基础最大的 一个版本
Link-org: vim.org Link-wikipedia: Vim(text editor)
学习vim最便捷、最高效的方式,就是在阅读vim的文档
在vim输入:help或者:h 查看帮助
vim是模式编辑器,有以下几种不同的模式
打开之后就处于正常模式 用于浏览和修改文本(插入除外),主要是删除、粘贴等
插入模式 这个模式用于正常的写入字符。 在这个模式下,vim的行为和普通的文本编辑器没有太大区别
按: 进入,一般用于高级的用于操作文件的,比如打开、关闭...
还可以用于高级的编辑
还可以用于设置编辑的选项等等
在normal模式下按下这些键可以进入 insert模式
下面是这些按下这些键,进入insert模式之后光标的位置说明
v V C-v
ESC
大部分的编辑技巧在于normal状态,Insert状态下
做好提示的配置就可以了
这里只做简单介绍,具体可参考vim的帮助文件
:h usr_03.txt
Normal 模式下的光标移动
w 移动到下一个单词的开头 b 上一个单词的开头 e 移动到下一个单词的末尾 ge 移动到上一个单词的末尾
跟w/b/e/ge 的移动方向相同 只不过这里的移动单位不一样,W/B/E/gE将不包含空格的 一串字符认为是一个移动单位 举例:1bcd;abcd;abc9 光标在9的位置时按下B就会跳转到1位置,中间略过了分号
配对的括号间相互移动
:h usr_04.txt
一般大小写之间区别就是:作用范围大小,作用区域相反(一个向前一个向后...)
v p ; V p
:h objects
4w 光标向后移动四个单词的位置
d2w 删除2单词
这部分涉及到正则表达式的内容
Normal 模式下 按 / 就可以Search :h pattern
全局替换 :%s/origin/new/options 选中之后替换 :'<,'>s/origin/new/options
:g vimcast
cd ~/dotfiles && ./deploy vim
files: ~/.vimrc ~/.vim
:h vimrc ~/.vimrc
个人推荐使用Vundle,具体可参见我的dotfiles/config_vim/vimrc文件
:h usr_41.txt
使用vim一定要了解正则表达式,这样会让自己的编辑更有效率 :h pattern
我个人刚刚接触Emacs编辑器不到半年,所以此处只简单介绍下 我了解的Emacs的特点
Emacs 有个模式,org-mode,结构性很强,我发现用它记笔记很方便 于是我就踏上了学习Emacs的不归路
Emacs的学习曲线很陡,而且它的理念跟我用了3~4年的vim截然不同, 因为是无模式的编辑器,要实现某个操作必须按着Ctrl Alt 组合键才能做到,这让我 很不适应,所以,刚接触Emacs,我的内心其实是拒绝的,但是为了org-mode,我艰难 的存活了下来,并且在这过程中学了点Emacs-lisp的编程经验
Emacs的快捷键很复杂,大多数需要Ctrl Alt Shift 的组合 所以我给它起了个名字,叫Ctrl到死的编辑器
Emacs下模拟vim操作的包有很多,Evil-mode是目前最流行,我个人认为功能比较 全面的Emacs vim插件。
基于Evil-mode,开源社区衍生出了好多插件,比如evil-leader......
Evil-mode 支持vim的模式编辑、查找替换、快捷键映射等等初级、中级的功能
刚在Emacs中存活下来,我就急不可耐的去找有没有在Emacs中模拟vim 操作的插件,果不其然,已经有人做了这个大轮子:Evil-mode 在使用Spacemacs这套配置之前,我一直是用evil-mode,然后其他功能 依然用Emacs的快捷键,Ctrl到死的操作
如果没有Evil-mode,我学习使用Emacs没有那么快 它是我在Emacs中存活的关键
在我的Emacs配置稳定下来之后,我开始逐渐了解Emacs,为了配置Emacs 我专门花时间学了下common lisp,声明不止,折腾不息。
在github上浏览Emacs相关的内容,高级搜索,按照star从高到低排序这么看, 很快我就发现了Spacemacs 这个git仓库
引用一句名言:
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决 Any problem in computer science can be solved by another layer of indirection
Spacemacs中很多配置是通过layer来实现的,每层layer约定自己的如下文件:
而使用Spacemacs这套配置只需要指定自己使用那些layer就可以了。 当然也能够自己创建layer
分层的结果是,配置起来更加规范,如果想禁用或者开启某些功能不用在 很多配置文件中查找了。还有就是Spacemacs对Emacs启动速度做了优化,增加了 缓存和延迟加载,比如启动的时候并不是加载所有layer,而是按照需求来加载相关 的layer,尤其是在Emacs daemon模式下,启动速度更快
Spacemacs中有一个key sequences的概念,利用它,我们就可以像 访问应用程序的菜单一样,一级一级的拿到自己想要的功能
比如,在应用里,通常有File->OpenRecentFiles 这个菜单 那么在Spacemacs中就有这样的快捷键:<space>fr,依次按下 空格、f、r,Spacemacs就会在底部打开一个helm buffer,里面是 最近打开的文件。而<space>ff 则代表要打开文件,会让你输入 文件的路径。
通过上面简单的两个例子,Spacemacs的使用跟用鼠标点击菜单栏 的功能是很类似的:
<space> --1.告诉Emacs我要使用菜单了
f --2.告诉Emacs我要使用一级菜单下的Files 菜单项
r --3.告诉Emacs我要使用Files->OpenRecentFiles菜单项,请给我一份最近打开的文件列表
虽然和鼠标操作原理很类似,但是比鼠标操作高效很多很多,而且这些key sequences都是有意义的 很容易记住
当然,这些快捷键菜单是自己可以配置的,具体配置请翻阅spacemace的官方文档
<space>sj --jump in buffer <space>pf --search file in project for open