断断续续的,使用vim已经有大概4年时间,但一直停留在很低的使用层面。对于key的map,let等命令还是不懂。对插件的使用也只是停留在ctags和csope。
最近手头一些事情总算快要告一段落,趁这个时间点,多学点vim的知识。先从vim自带的教程开始。每天大概花半个小时学习,然后做好笔记。ok,开始!
学习vim的捷径:Do not try to memorize, learn by usage.
删除操作: d [number] motion
dw: 删除整个单词,包括最后一个字符(分界符,比如空格)。此时光标在下一个单词首字母上
de: 删除整个单词,但保留最后一个字符。此时光标在下一个单词首字母前面
d$: 删除从光标位置开始,直到行尾的所有内容
替换操作: c [number] motion
r: 修改单个字母 (r - replace)
ce: 修改整个单词 (e - end of world). 相当于删除当前单词,然后进入插入模式。待一个单词输完后自动进入normal模式。
c$: 修改直到当前行末尾
cw: 修改当前单词
撤销操作:
u: 撤销上一次操作
U: 撤销最近一次对整行的更改
C+r: undo the undo's
查找和替换(substantiate)操作
/: 向下查找; n:下一个匹配项; N:上一个匹配项
?: 向上超找; n/N 同上
/word\c : 可以在查找的时候忽略大小写
:s/old/new : 用new替换第一个匹配到的old
:%s/old/new : 用new替换每一行首次匹配到的old。也就是说,如果一行有多个old,只替换第一个
:s/old/new/g : 和不加g的效果一样
:%s/old/new/g : 全部替换,不论一行有多少个
:%s/old/new/gc : 每一次替换前会confirm用户
:#,#s/old/new/g :对某个范围内的内容进行替换操作
可见,%s/old/new/gc 比较通用
文件操作:
w filename 将当前缓冲区内容写入到filename中
截取文件中的部分写入到新文件: 1. 进入view模式,选中需要的文本; 2. 进入command模式,发现bottom line变为 :'<,'>; 3. 输入w filename;
读取(Retrieving)外部内容到当前文件:
1. 外部文件: r filename
2. 读取外部命令的输出,这个很有用,在写文档的时候,可以直接保存某些命令的输出。 比如,r !ls -a
杂项:
查看当前行状态:C+g
回到上一次操作的位置:C+o (非常有用,尤其是查找的时候,回到查找前的位置)
a : append. 在当前单词尾部插入内容
e: 按单词向后移动
R:进入完全替换模式,跟按下键盘的insert键效果一样。
帮助: help vimrc-intro
自带命令的补全: :字母 C+d 会列出所有
查看完整的用户手册:help user-manual
============= cookbook ======================
1. 删除空白行
需求场景:从网上copy的代码,经常有很多空白行
解决办法::g/^$/d
2. 删除vim中的^M标志
http://blog.csdn.net/dadoneo/article/details/6076479
命令::%s/Ctrl+v Ctrl+m//g
如果替换后换行消失,可使用:
:%s/Ctrl+v Ctrl+m/\r/g