💘 Vim Practice
0. 序
Vim
vs. Emacs
0.1 一上来就要说一个『宗教性』问题,很危险啊! Emacs
,只说自己了解到的一点感觉。
Vim
:编辑器之神;Emacs
:神的编辑器。 🎭
上面的这句调侃不重要,重要的是效率
个人没入Emacs
圈,牛掰编辑器先入的是Vim
。自己作为一个Emacs
圈外人,对于两者对比的感觉是:
Vim
,从 编辑理念 出发并思考很深,通过面向编辑的语言进而脚本化/编程化的能力实现平台化。- 契合了 编辑器之『神』 的说法。
Vim
提供了一套面向编辑的语言:diw
:delete in word
,删除光标所在单词;dd
:删除行(重复命令是对行操作)。x
:删除一个字符,5x
:重复5次删除字符(即删除5个字符)。- 一旦你熟悉习惯这门语言,编辑的过程 就是 思考的过程。
- 另外,这门语言本身就是可编程的(即编程语言),像上面用数字表示命令的重复执行次数,以及可以用
norm
命令或是宏把指令脚本化。这里不展开了。
Emacs
,平台理念 很深,以平台化思路承载和带动编辑理念。- 契合了 『神』的编辑器 这个说法。只要你喜欢可以把
Emacs
打造成Vim
,当然Emacs
也提供一套自己编辑风格,基于组合快捷键,现在各种软件都提供快捷键来加速操作,尤其是程序员的IDE
更是重度依赖熟练的使用快捷键。 - 关于
Emacs
的平台特质可以看看文章:- 程序员的编辑器 ——
Vim
,也提到了一点:
vi
追求的是快捷——启动程序迅速,编辑文本高效,功能专注,而Emacs
追求的是功能的丰富强大以及集成带来的方便,在Emacs
里头可以发邮件,上新闻组,听MP3
,浏览网页,玩游戏,几乎可以login
->emacs
->logout
了 :-),vi
和Emacs
都是程序员的编辑器,相比而言,Emacs
更是提供了一种程序员的生活氛围。 - 从
Vim
到Emacs
到Evil
Emacs
只是个强大的平台,提供各种定制来满足每个人的不同需求。所以ThanksEvil
,我已把Emacs
打造成了理想的『Vim
化的Emacs Editor
』,我可以纵情使用更方便的方式来工作。
这个思路已经被解决方案化了,即是spacemacs
,已经是最火的Vim
/Emacs
配置发行版了,我还一直没有去上手😑 ,真是山外有山而学无止境啊~😲
- 程序员的编辑器 ——
- 契合了 『神』的编辑器 这个说法。只要你喜欢可以把
0.2 关于编辑本身
Editing is a rewording activity. -- Alan J. Perli
编辑是推敲改写的过程。 —— 艾伦·杰·佩利(计算机程序设计领域的科学家,首届图灵奖的获得者)
人类智慧输出包含了『录入』和『编辑』操作。
目前,『键盘录入』/『键盘编辑』是主流方式。
键盘操作效率的关键是『打字指法』/『盲打』。
对于录入,当然还有语音录入等等(期待脑电波的录入方式成为现实
对于中文,还多一样,即『输入法』,如五笔、拼音。
『编辑器』 对于 编辑 的重要性 不言而喻。
综上,智慧输出包含了:
- 键盘操作:
- 打字指法
- 录入 => 键盘录入:
- 输入法
- 编辑 => 键盘编辑:
- 编辑器
上面『打字指法』和『编辑器』的顺序重要的,如果你还不能 盲打,那么不要想着要找一个的编辑器就能高效了!
1. 学习资料
1.1 关于『学习』本身的规律
- 学习一样新事物的先进,不在于刚开始看到的点,而在于理解 一整套 方法,整套方法背后蕴含体现的是理念。
- 上手新事物必然先经历一个能力下降阶段,因为你要放弃你所熟悉的,重新接纳新的一套方法。
- 有下面想法同学必然禁锢于原地踏步:
- 不愿去理解理念(整套方法),而是用当前自己熟悉的技能点去比新事物的点。
- 不愿接受上手新事物的学习成本和先要经历能力下降的一个阶段。
Vim
入坑路径
1.2 个人的- 看一下
Vim
整体评论性文章,觉得值得入门上手。
这点基本不是问题,Vim
名声在外,问题其实是入门门槛。 - 通过
vimtutor
,上手了解些基本操作。这时候心理上要注意:- 这只是了解基本,不要认为这一步可以在日常中方便的使用了。
- 让自己可以在
Vim
环境生存下来。首先要避免为了退出Vim
要去重启机器吧~
(😂 可以看看Stack Overflow:帮助一百万开发者退出 Vim)
- 系统学习,边看《
Vim
实用技巧 - 以思维的速度编辑文本》边操作,完成实践和理念储备。
这一步我保持一个相对慢速但持续的过程,两三周时间。 - 配置上
spf13-vim
发行版,舒适强大专业的Vim
环境配置。
很多人不推荐这么做,去使用别人的一大套配置。
我这么做比较实用,原因是:避免大量配置打磨的时间投入,先接纳有心人的专业经验。
中间会去填spf13-vim
可能的一些坑。 - 了解一些经典插件并逐个实战,如
surround
。
1.3 文章/讨论
- Why
Vim
is awesome VIM
is awesome — But don’t overdo it
过犹不及,再好的东西,也要明白什么时候不合适,这是反而说明是深的理解。- 简明
Vim
练级攻略 - coolshell.cn | 英文原文 LearnVim
Progressively
快速逐步上手介绍。 - Coming Home to
Vim
快速上手使用。为什么使用Vim
/Vim
使用感觉/上手的高效配置/好用的插件。 - 普通人的编辑利器 ——
Vim
/ 程序员的编辑器 ——Vim
这2篇文章以普通用户/程序员的视角,短短一篇文章让你感受Vim
的风格、能力和一致性设计。
以非系统学习方式,获得偏整体了解的好文章! - 提高
Vim
使用效率的 12 个技巧 - Awesome
Vim
Plugins - 池建强的Blog:『谁说
Vim
不是IDE
?』系列: - 知乎上的一些话题(看一下讨论扩展一下了解)
Emacs
的文章(能有瑜亮般的对手而相互竞争与学习,比起高处不胜寒的孤寂可以说是幸运!)- 从
Vim
到Emacs
到Evil
Emacs
只是个强大的平台,提供各种定制来满足每个人的不同需求。所以ThanksEvil
,我已把Emacs
打造成了理想的『Vim
化的Emacs Editor
』,我可以纵情使用更方便的方式来工作。 - 王垠 之《
Emacs
是一种信仰!世界最强编辑器介绍》
- 从
1.4 上手
vimtutor
1.5 速查
内容比较精简且有中文版的:
Vim
Cheat Sheet中文版 - vim.rtorr.com- Graphical
vi
/Vim
Cheat Sheet and Tutorial中文版(右图,点击看大图)
该图的来源链接,官网中文版。 # 这张图你肯定在别人桌子上见过😄
内容比较丰富的:
- Beautiful
Vim
Cheat-Sheet (右图,点击看大图)
# 个人觉得这个是信息表达最好的一个!💘 💖 该图的来源链接,这个Sheet Cheat的评论和官网。 - Cheat Sheet - michael.peopleofhonoronly.com
Cheat Sheet有几个就够用了,别多看了你~ 当然还有更多Vim Cheat Sheet
1.6 系统学习
Vim
user manual/reference,即是Vim
的内置帮助系统,内容丰富!!
中文版 http://sourceforge.net/projects/vimcdoc/files/pdf-manual/- 学会用
Vim
的内置帮助:h
:h 'option'
:h command
:h :ex_command
:h ctrl-w
Vim
帮助系统的帮助,即如何使用Vim
的帮助系统::h helphelp
- 学会用
- 个人整理的
Vim
书籍豆列- 个人先看的是《
Vim
实用技巧 - 以思维的速度编辑文本》 | Practical Vim, Second Edition
以编辑理念和实践模式为纲介绍,推荐之。
词句共灵感一射,编辑与思考齐飞! - 学习
vi
和Vim
编辑器(中文版) | 《Learning thevi
andVim
Editors》,行文稳健(很合我的风格):- 先介绍基本功能再说明如何组合技术,从熟悉到领会。
- 再介绍基本编辑器(
vi
/ex
)再说明Vim
,从历史发展的过程更能深入理解功能适用场景。 - 还介绍
vi
/Vim
的周边信息,如vi
/Vim
的名家名言,各个变种,vi
/Emacs
的文化等等
- 个人先看的是《
- vim-galore - Everything you need to know about
Vim
| 中文译文
Vim
方方面面资料汇总。
Vim
配置/插件的资源
2. 2.1 经典的配置发行版/插件站点
spf13-vim
- a distribution ofVim
plugins and resources -Vim
的配置集合和配置框架。- 包含很多插件/主题,无论是小白还是高手,省时好用是王道,用起来。
- 直接使用,配置的效果和包含的插件 已经很不错了。
spf13-vim
首先是个Vim
配置框架,水准尽显!
- The Ultimate
vimrc
- Over the last 10 years, I have used and tweaked Vim.- 作者 10年+ 在
Vim
配置上的积累,绝对值得参考学习!
- 作者 10年+ 在
Janus
:Vim
Distribution- 又一个
Vim
配置版本!
- 又一个
- Maximum Awesome - 三架马车
Vim
、tmux
和iTerm 2
的整套配置。- 值得了解学习!
Vim
+Emacs
distribution(本人没有入Emacs
圈子,作为广度了解一下)Vim
Awesome - a comprehensive, accurate, and up-to-date directory ofVim
plugins,Vim
插件浏览站点
2.2 经典插件介绍
YCM
- Welcome to world of
YCM
由@阳台有爱贡献编写!
- Welcome to world of
3. 分享视频及其笔记
3.1 Learning Vim in a Week
Youtube视频地址,讲解了入门Vim
时
- 观念上的改变/注意事项
- 总有更好的做法
- 学习
Vim
是个持续的过程,可以不断提高能力,进而逐步提升效率。
- 不要在平时的工作使用中开始学习
Vim
!因为 工作紧急需要的效率 与Vim
刚开始学习时摸索的低效 有矛盾! Vim
命令记忆法
还给出实用的Tips:
Hack
(定制)你的键盘- Graphical vi/Vim Cheat Sheet and Tutorial
中文版 http://blog.ngedit.com/vi-vim-cheat-sheet-sch.gif .vimrc
- 你的新朋友!- 一定要 版本控制 起来!
- 可以偷借你朋友的配置文件(
dotfiles
),或是借鉴 https://github.com/thoughtbot/dotfiles
- 通过官方的
vimtutor
定期适量的学习 / 通过游戏http://vim-adventures.com/来学习~ - 通过看高手的操作视频方法来学习
3.2 7 Habits For Effective Text Editing 2.0
Youtube视频地址,2007-02-13,Vim
作者 Brian Moolenaar 在Google
做的演讲,讲解了编辑器的选择、达到高效编辑的方法和理念。
编辑器的选择
- 如果你已经熟悉精通了一个编辑器,挺好的。这里不会讨论『
Vim
比Emacs
更好』这个问题,但你可能会觉得Emacs
并不爽~😂 - 但不要使用像
Notepad
这样简陋的编辑器,你浪费了大量的生命!😲 - 要么用一个觉得的爽的编辑器,要么转用
Vim
吧~😜 除此再没有其它的出路!(There is NO other RULE!)
达到高效的3个基本步骤
这部分的总结页:
- 发觉低效
- 发现你浪费时间的地方
- 找到更快的方法
- 阅读在线帮助
- 阅读速查手册、书籍等等
- 问问朋友或是同事
- 搜索网络
- 自己搞定
- 使之成为习惯
- 动手做起来
- 持续改进
附原文:
- Step 1: Detect inefficiency
- Find out what you waste time on
- Step 2: Find a quicker way
- read the on-line help
- read the quick reference, books, etc.
- ask friends and colleagues
- search the internet
- do It yourself
- Step 3: Make it a habit
- do it
- keep on improving
如何做到低效地编辑
@oldratlee 这是我最喜欢的一节
😂
- 必须立即开始编辑文本。没空去读文档或是学新的命令。
结果一直只会用原始的命令。 - 想学习编辑器提供的每一个功能,总是想用最快捷的命令。
结果是浪费大量的时间去学习从不会用到的内容。
附原文:
How not to edit effectively
- You have to get the text ready right now. No time
to read documentation or leam a new command.
You will keep on using primitive commands. - You want to learn every feature the editor offers
and use the most efficient command all the time.
You will waste a lot of time learning things you will never use.
4. 个人关心的问题
欢迎高手指点!请提交Issue。
Vim
便利切换的问题
4.1 中文输入法在问题说明:
本来Vim
是有模式的(Normal/Command/Insert/Replace/Visual/...
),再加上中文需要输入法切换(你处在中文输入还是英文输入状态),中文编辑需要在脑子记住当前是哪个状态的,个人觉得这很蛋疼。
理想的状态期望:
- 当切换到如
Normal/Command
模式时,自动切换到英文输入法。 - 切回到
Insert
模式时,还原文字输入时所用的输入法状态(中文输入/英文输入)。
解决方法:
解法参见@CodeFalling
的完美解决 Mac
下 Vim/Emacs
的输入法切换问题:
- 安装配合工具
fcitx-remote-for-osx
- 安装
Vim
插件fcitx-vim-osx
PS: Thanks for your PERFECT works! @CodeFalling
Vim
打开文件乱码问题
4.2 问题说明:
Vim
打开文件是乱码,常见的原因是编码识别错误。
解决方法:
可以在.vimrc
配置文件中设置好Vim
的用于尝试识别的编码序列,依次使用序列中的编码直到这个编码可以正确显示文件中的字符:
" 需要配置到 .vimrc 中
set fileencodings=ucs-bom,utf-8,gb18030,utf-16le,big5,euc-jp,euc-kr,latin1
如果仍然识别成乱码(比如文件包含多种编码的字符,一定会有乱码),可以在命令模式显式指定编码重新打开文件,命令如下:
" 用UTF8编码重新打开加载当前文件
:e ++enc=utf-8
" 用GBK编码重新加载
:e ++enc=gbk
" GB18030字符集是GBK的超集,为了方便键入使用GBK名
" 可以进一步在 .vimrc 中配置Mapping,省得繁琐的键入
nnoremap <Leader>eu :e ++enc=utf-8<CR>
nnoremap <Leader>eg :e ++enc=gb18030<CR>
更多原因解析和处理方法参见@滇狐的文章VIM
文件编码识别与乱码处理,讲得深入浅出、鞭辟入里!
PS:
像Vim
一样,字符编码也是一个很具计算机风味的话题,这里不解释,如果不清楚可以自己搜索研究一下。
4.3 转换文件编码
问题说明:
如题。
解决方法:
" 设置写文件时使用UTF8编码
:set fileencoding=utf-8
" 写文件(完成文件编码转换)
:w
" 为了方便键入,使用短选项名fenc并写成一行
:se fenc=utf8 | w
" 文件转换成GBK编码
:se fenc=gbk | w
" GB18030字符集是GBK的超集,为了方便键入使用GBK名
" 可以进一步在 .vimrc 中配置Mapping,省得繁琐的键入
nnoremap <Leader>eU :set fileencoding=utf-8 \| w<CR>
nnoremap <Leader>eG :set fileencoding=gb18030 \| w<CR>
参考资料: How can I change a file's encoding with vim? - vi.stackexchange.com
Vim
字体设置
4.4 问题说明:
合适字体可以方便识别,提高效率和心情,不能说不重要!
- 对在控制台中运行的
Vim
命令,字体由终端配置。 GUI Vim
由Vim
自己来配置。
Mac
下,终端常用的是iTerm
/terminal
应用,GUI Vim
用的是MacVim
应用。
解决方法:
详见单独一页的说明:设置Vim
字体。
Vim Map
4.5 查看所有的问题说明:
下面的场景下,会想查看所有的Vim Map
:
Vim
可以定制自己命令,为了不重写已有的快捷键(Map
)- 也看看想要功能是不是已经有
Map
了
解决方法:
redir > map.txt | silent map | redir END
" 如果文件已经存在加上!来覆盖输出的文件
redir! > map.txt | silent map | redir END
crontab -e
修改失败
4.6 问题说明:
crontab
修改后,报crontab: temp file must be edited in place
出错信息,crontab
没有修改。
$ crontab -e
# ... I do my thing in vim & :wq
"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
解决方法:
在.vimrc
配置文件中设置,对于crontab
文件不使用备份文件:
" 需要配置到 .vimrc 中
autocmd BufNewFile,BufRead crontab.* set nobackup | set nowritebackup
更多说明参见:
- How do I edit crontab files with Vim (I get the error: 'temp file must be edited in place') - vi.stackexchange.com
- Using vim to edit crontab on Mac OS/X
Vim
中文分词支持的问题
4.7 问题说明:
不像英文,中文的词的分离没有像空格这样明显分隔,词相关的移动变得很麻烦。
解决方法:
目前还 没有 找到解法。总得来说,这个问题不大,可以替代的做法:
Hack
/加速系统的按键重复后,可以简单地用hjkl
在小/大范围内快速导航。- 用词以外的方式也可以比较快地完成导航,如
- 在大范围的按段跳、按页跳(
CTRL-D/CTRL-F
)。 - 按搜索跳
fz/Fz/tz/Tz
n/N
- 在大范围的按段跳、按页跳(
Vim
分词的相关资源