前天晚上看casa 直播项目的组件化 ,不仅了解了如何快速对现有项目进行组件化,以及进一步不断迭代,实现完全组件化的过程;同时,也被casa 的vim 技能的熟练程度所震撼。早就听说,vim 是unix 系统上文本编辑的神器,亦有许多牛人用vim 编程可以键字如飞,效率之高令人望尘莫及。也许我们成不了牛人,但是学会vim 还是很有必要的,毕竟它确实能够提高文本的编辑效率。于是,花了两天时间,又重新系统学习了vim 的各种命令,现总结一下,方便用时再查。
一.vim的模式
vim 大致有三种模式:
命令模式:主要用来浏览和修改文本内容 一般情况下,vim 打开的都是命令模式(正常模式);任何模式下,按下ESC 键都可以进入命令模式
插入模式:用来向文本中添加内容 通过i 、I 、a 、A 、s 、S 等等指令可以进入插入模式,之后就可以修改文本内容了
编辑模式:用于操作文本文件 通过: 命令可以进入编辑模式,之后就可以保存文件、改变编辑器本身状态等等
其实,vim为了增强功能,还有另外两种模式:
可视模式:用于复制文本 命令模式下,按v 可以进入可视模式 ,之后就可以移动光标选择文本;按ctrl + v 可以进入视行模式 ,可以进行列选中
替换模式 命令模式下,按R 进入替换模式
二.文档的操作
编辑模式下执行该命令
vim filename -> 打开文档
:e file -> 关闭当前编辑的文件,并打开新的文件
:e! file -> 放弃当前对文件的修改并关闭,同时打开新文件
:e -> 重新加载文档
:e! -> 放弃改动,并重新加载文档
:f 或 ctrl + g -> 显示文档名、是否修改、光标位置等等
:f filename -> 把编辑的文件另存为新的filename,需要wq ,否则不会保存新文件
:w -> 保存修改
:n1,n2w filename -> 选择性保存从n1行到n2行的内容
:wq 或 :x 或 ZZ -> 保存并退出
:q[uit] -> 退出当前窗口
:saveas filename -> 另存为新的filename
:Sex -> 水平分割一个窗口,浏览文件系统
:Vex -> 垂直分割一个窗口,浏览文件系统
三.文档的移动
文档的移动都是在命令模式(正常模式)下进行的
h 或 退格 -> 左移一个字符
l 或 空格 -> 右移一个字符
j -> 下移一行
k -> 上移一行
+ 或 enter -> 把光标移动到下一行非空白字符
w -> 前移一个单词,光标停在单词的开头
W -> 前移一个单词,光标停在单词的开头,但是会忽略一些标点
e -> 前移一个单词,光标停在单词的末尾
E -> 前移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点
b -> 后移一个单词,光标停在单词的开头
B -> 后移一个单词,光标停在单词的开头,但是会忽略一些标点
ge -> 后移一个单词,光标停在单词的末尾
gE -> 后移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点
( -> 前移一句
) -> 后移一句
{ -> 前移一段
} -> 后移一段
fc -> 把光标移动到同一行的下一个c字符处
Fc -> 把光标移动到同一行的上一个c字符处
tc -> 把光标移动到同一行的下一个c字符前
Tc -> 把光标移动到同一行的上一个c字符后
上面的操作都可以配合数字n 使用,例如:3h 表示光标左移3 个字符。下面是另外一些文档移动的命令:
0 -> 移动到行首
^ -> 移动到本行第一个非空白字符
$ -> 移动到行尾
n| -> 把光标移到第n列上
nG -> 把光标移到第n行上
H -> 把光标移到到屏幕最顶端一行
M -> 把光标移到到屏幕中间一行
L -> 把光标移到到屏幕最底端一行
gg -> 把光标移到到文件头部
G -> 把光标移到到文件尾部
四.翻屏
翻屏命令是在命令模式进行的
ctrl + f -> 下翻一屏
ctrl + b -> 上翻一屏
ctrl + d -> 下翻半屏
ctrl + u -> 上翻半屏
ctrl + e -> 向下滚动一行
ctrl + y -> 向上滚动一行
n% -> 把光标移动到文件内容的n%位置处
zz -> 把当前行移动到屏幕中央
zt -> 把当前行移动到屏幕顶端
zb -> 把当前行移动到屏幕底端
五.插入文本
从命令模式进入插入模式,设置光标开始输入的位置
i -> 在光标前插入
I -> 在当前行的第一个非空字符前插入
a -> 在光标后插入
A -> 在当前行最后插入
o -> 在下面新建一行插入
O -> 在上门新建一行插入
:r filename -> 在当前行位置插入另一个文件的内容
:[n]r filename -> 在第n行插入另一个文件的内容
:r !date -> 在当前行(空行)插入日期,或当前行非空,就在下一行插入日期。同理,:r !command 可以把shell命令的输出插入当前行
小技巧
- 命令模式下,按数字
n ,然后按i ,输入= ,最后按ESC ,就会在光标处插入n 个= ,这在做分割线时非常有用
- 视行模式下(
ctrl+v ),选择要操作的行,按i (I )输入插入内容,之后按两次ESC ,就会在每行选定的区域出现插入的内容
下面是修改文本的命令,功能是先删除文字,然后等待插入文本:
c[n]w 或 [n]cw -> 删除光标后n个单词,然后进入插入模式
c[n]l 或 [n]cl -> 删除光标后n个字母,然后进入插入模式
c[n]h 或 [n]ch -> 删除光标前n个字母,然后进入插入模式
[n]cc -> 删除当前行及以后的n-1行,然后进入插入模式
[n]s -> 删除光标之后的n个字符,然后进入插入模式
[n]S -> 删除当前行及以后的n-1行,然后进入插入模式
类似的操作也适用于:d 、y
六.剪切、复制和粘贴
在命令模式执行该命令
[n]x -> 剪切光标右边n个字符,相当于d[n]l
[n]X -> 剪切光标左边n个字符,相当于d[n]h
y -> 在可视模式下复制选中的文本
yy 或 Y -> 复制整行文本
y[n]w -> 复制n个词
y$ -> 复制从光标到行尾的内容
y0 -> 复制从光标到行首的内容
y^ -> 复制从光标到本行非字符的内容
:m,ny -> 复制m行到n行的内容
y1G 或 ygg -> 复制光标以上所有行
yG -> 复制光标以下所有行
d -> 删除(剪切)在可视模式下选中的文本
[n]dd -> 删除(剪切)n行
:m,nd -> 删除(剪切)m行到n行的内容
p -> 在光标之后粘贴
P -> 在光标之前粘贴
文本对象可以快速的操作一个词、一个句子、一个段落等等,大大加快了文本操作的便捷性。其中,y 、d 、c 、v 都可以和这些命令配合使用,具体如下:
aw -> 一个词
as -> 一个句子
ap -> 一个段落
七.查找和替换
7.1查找
查找是在命令模式下执行的命令,用于快速查找特定的内容
/something -> 在光标文本后面查找something
?something -> 在光标文本前面查找something
/pattern/[+]n -> 将光标停在匹配pattern模式后面第number行
/pattern/[-]n -> 将光标停在匹配pattern模式前面第number行
n -> 向后查找下一个
N -> 向前查找上一个
7.2替换
替换是在编辑模式下执行的命令,用于替换特定的内容
:s/old/new -> 用new替换当前行的第一个old
:s/old/new/g -> 用new替换当前行所有的old
:n1,n2/old/new/g -> 用new替换n1行到n2行的所有old
:%s/old/new/g -> 用new替换文件中的所有old
:%s/^/xxx/g -> 在每一行的行首插入xxx
:%s/$/xxx/g -> 在每一行的行尾插入xxx
八.排版
vim 可以进行简单的快速的排版,下面的排版是在命令模式下执行
[n]<< -> 向左缩进一个n个shiftwidth
[n]>> -> 向右缩进一个n个shiftwidth
J -> 拼接当前行和下一行
gJ -> 拼接后不留空格
下面的排版是在编辑模式执行的命令
:le(ft) -> 本行文字靠左
:ce(nter) -> 本行文字居中
:ri(ght) -> 本行文字靠右
vim 还可以统计本行或者整个文本的字数,行数等等信息
ctrl + g 统计文档的字符数、行数、文件名等信息
九.编辑文件
vim 可以一次编辑多个文件,如:vim a.txt b.txt c.txt
:next 或 :n -> 编辑下一个文件
:2n -> 编辑下2个文件
:previous 或 :N -> 编辑上一个文件
:wnext -> 保存当前文件,并编辑下一个文件
:wprevious -> 保存当前文件,并编辑上一个文件
:args -> 显示文件列表
vim -o filenames -> 在水平分割多个窗口中编辑多个文件
vim -O filenames -> 在垂直分割多个窗口中编辑多个文件
:split 或 :sp -> 把当前窗口水平分割成两个窗口
:vsplit 或 :vsp -> 把当前窗口垂直分割成两个窗口
:qall -> 关闭所有窗口
:wall -> 保存所有修改过的窗口
:only -> 只保留当前窗口,关闭其它窗口
:close -> 关闭当前窗口
[n]u -> 取消n个改动
U -> 取消当前所有的改动
在vim 窗口分屏后,在多个编辑窗口直接切换编辑的命令如下:
ctrl+w ctrl+w -> 切换下一个窗口
ctrl+w p -> 切换到前一个窗口
ctrl+w h(l,j,k) -> 切换到左 (右、下、上)的窗口
ctrl+w H(L,J,K) -> 切换窗口到最左(右、下、上)的窗口
进入替换模式,就可以快速替换当前的文本,在命令模式才可以进入替换模式
r -> 替换光标出的一个字符
R -> 进入替换模式,可以进行多次替换,按esc回到命令模式
十.编程辅助技能
g; -> 上一个修改过的地方
g, -> 下一个修改过的地方
[[ -> 跳转到上一行函数块开始的位置,需要有单独一行的{
]] -> 跳转到下一行函数块开始的位置,需要有单独一行的{
[] -> 跳转到上一行函数块结束的位置,需要有单独一行的}
][ -> 跳转到下一行函数块结束的位置,需要有单独一行的}
% -> 移动到匹配()、{}、[]的另一个符号上
- 可视模式下,选择代码块,然后按
= ,代码会进行自动缩排
下面的符号匹配能够高效的处理文本,可以把c 、d 、y 和' 、" 、( 、[ 、{ 、< 结合起来使用,可以加快编程速度,下面以c 为例:
ci' -> 修改、剪切或复制' 之间的内容,不包含' 本身
ca' -> 修改、剪切或复制' 之间的内容,包含' 本身
十一.命令行
下面的命令是在编辑模式下执行
:! cmd -> 执行外部命令
:r !cmd -> 将命令的返回结果插入文件当前的位置
:pwd -> 显示vim的工作目录
:ver -> 显示版本信息
十二.Mac Terminal快捷键
ctrl+u -> 删除整行
ctrl+l -> 清屏
vim 的命令大致有这么多,还有一些不是太常用的没有列举出,如有需要,请查看相关手册。如果你想用vim 高效的编辑文本,还是要多练习,毕竟这么多命令,无法一下子全部记住。最后,附上一张vim 的指法引导图,可以参考一下。(本文所有图片来自互联网,版权归源作者所有)
参考资料
http://blog.csdn.net/scaleqiao/article/details/45153379
http://www.cnblogs.com/xiaowant/articles/1992923.html
http://www.cnblogs.com/yangjig/p/6014198.html (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|