前天晚上看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