第一章:光标移动
移动光标
单位级
h
向左一字符j
下一行k
上一行l
向右一字符
单词级
w
orW
向右移动到下一单词开头e
orE
向右移动到单词结尾b
orB
向左移动到单词开头
注意:所有小写单词都是以分词符作为单词界限,大写字母以空格作为界限
块级
gg
到文档第一行G
到文档最后一行0
到行首(第 1 列)^
到第一个非空白字符$
到行尾H
移动到屏幕顶端M
移动到屏幕中间L
移动到屏幕底部Ctrl-d
向下移动半页Ctrl-u
向上移动半页Ctrl-f
向下移动一页Ctrl-b
向上移动一页:<N>
or<N>gg
跳转到第 N 行:+<N>
or<N>j
向下跳 N 行:-<N>
or<N>k
向上跳 N 行
gf - go file
第二章:打开文件、查找内容
打开文件
在 Vim 中打开文件
:e <filename>
打开名为 filename 的文件,若文件不存在则创建之:Ex
在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:-
进入上级目录
)
查找
文档内查找
*
向后查找光标当前所在单词#
向前查找光标当前所在单词/<search>
向后查找指定字符串?<search>
向前查找指定字符串n
继续查找下一个N
继续查找上一个
行内查找
f<X>
当前行内向行尾方向查找并定位到字符X
t<X>
当前行内向行尾方向查找并定位到字符X
之前F<X>
当前行内向行首方向查找并定位到字符X
T<X>
当前行内向行首方向查找并定位到字符X
之后;
继续向当前方向查找下一个字符,
向当前相反方向查找下一个字符
当前文档中有几个 “Vim” 单词,你可以尝试用
*
和#
进行查找并感受n
和N
的方向性。上面的 “注意” 中有几个字符 “n”,你可以在那试试行内查找并感受下
;
和,
的方
向性。
匹配查找
Vim 中可以使用 %
对 (
和 )
,[
和 ]
,{
和 }
进行匹配查找,当光标位
于其中一个符号上时,按下 %
,光标会跳到与之匹配的另外一个符号上。
在下列文本中的
()[]{}
字符上按%
看看效果,连续多按几次。
const func = (win, doc) => {
const SEVEN = ((1 + 2) * (3 + 4) * (5 - 6)) / 7;
const YU = [1, 2, [[3, 4], 5, 6], 7];
if (true) {
return SEVEN;
} else {
return YU;
}
};
第三章:文档的修改与保存
插入
i
当前字符前插入a
当前字符后插入I
行首插入A
行尾插入o
在下一行插入O
在上一行插入
删除(并保存到 Vim 剪贴板)
s
删除当前字符,并进入INSERT
模式S
删除当前行并保存到 Vim 剪贴板,同时进入INSERT
模式(等同于cc
)x
删除当前字符,相当于 insert 模式下的Delete
X
删除前一个字符,相当于 insert 模式下的Backspace
dd
删除当前行,并将删除的内容保存到 Vim 剪贴板d<X>
删除指定内容并保存到 Vim 剪贴板cc
删除当前行并保存到 Vim 剪贴板,同时进入INSERT
模式c<X>
删除指定内容并保存到 Vim 剪贴板,同时进入INSERT
模式
说明:<X>
部分是对操作内容的描述,如果要删除一个单词,就输入dw
或者
de
,要复制当前位置到行尾的内容,就输入y$
,要删除后面 3 个字符并插入,就输入
c3l
诸如此类。_
复制
yy
复制当前行到 Vim 剪贴板y<X>
复制指定内容到 Vim 剪贴板
粘贴
p
在当前位置后粘贴P
在当前位置前粘贴
合并
J
将当前行与下一行合并
尝试在下面的文本中进行复制粘贴练习
删除这一行
粘贴到这一行下面
剪切 ABC 并把它粘贴到 XYZ 前面,使这部分内容看起来像
剪切 并把它粘贴到 ABC XYZ 前面。
替换
r<X>
将当前字符替换为 Xgu<X>
将指定的文本转换为小写gU<X>
将指定的文本转换为大写:%s/<search>/<replace>/
查找 search 内容并替换为 replace 内容
尝试修改下列文本的大小写
Change this line to UPPERCASE, THEN TO lowercase.
还有个更好玩的命令
g~<X>
,先将光标定位到上面那行文本,执行0g~$
看看发生了
什么。
撤销、重做
u
撤销Ctrl-r
重做
保存文件
:w
保存当前文件:wa
保存全部文件:wq
orZZ
保存并退出:q!
orZQ
强制退出,不保存:saveas <new filename>
文件另存为:w <new filename>
文件另存一份名为<new filename>
的副本并继续编辑原文件
第五章:分屏与标签页
窗口分屏
工作中经常会遇到这种情况,就是需要参照其他文档编辑当前文档(场景:翻译),或者从
另外一个文档 copy 代码到当前文档(场景:复制 html 元素类名到 css 文档),这时候
就是你最需要分屏的时候。
分屏方式
:split
缩写:sp
orCtrl-w s
上下分屏:vsplit
缩写:vs
orCtrl-w v
左右分屏:diffsplit
缩写:diffs
diff 模式打开一个分屏,后面可以加上 {filename}
窗口跳转
Ctrl-w w
激活下一个窗口Ctrl-w j
激活下方窗口Ctrl-w k
激活上方窗口Ctrl-w h
激活左侧窗口Ctrl-w l
激活右侧窗口
移动分屏
Ctrl-w L
移动到最右侧Ctrl-w H
移动到最左侧Ctrl-w K
移动到顶部Ctrl-w J
移动到底部
注意:区分大小写。另外,可以将底部的屏幕移动到右侧,实现上下分屏到左右分屏的转
换。
屏幕缩放
Ctrl-w =
平均窗口尺寸Ctrl-w +
增加高度Ctrl-w -
缩减高度Ctrl-w _
最大高度Ctrl-w >
增加宽度Ctrl-w <
缩减宽度Ctrl-w |
最大宽度
实践!实践!实践!
标签页
第二章中提到过的 buffer 和刚刚讲到的分屏操作都很适合在少量文件之
间进行切换,文件超过 3 个我觉得就不方便了,而标签页则更适合多文件之间的切换。
创建标签页
:tabnew
or:tabedit
缩写:tabe
打开新标签页Ctrl-w gf
在新标签页中打开当前光标所在位置的文件名
注意::tabnew
和 :tabedit
后面都可以跟一个 <空格><文件名> 用以在新标签页中
打开指定文件,还可以在 :
后面加一个数字,指出新标签页在列表中的位置(从 0 开始
)。
切换标签页
gt
or:tabnext
缩写:tabn
下一个标签页(最后一个会循环到第一个)gT
or:tabprevious
缩写:tabp
上一个标签页(第一个会循环到最后一个):tabrewind
缩写:tabr
or:tabfirst
缩写:tabfir
到第一个:tablast
缩写:tabl
到最后一个标签页
关闭标签页
:tabclose
缩写:tabc
关闭当前标签页:-tabc
关闭上一个标签页:+tabc
关闭下一个标签页:tabonly
缩写:tabo
关闭其他标签页
下一章将介绍块操作。
第六章:块操作
我们经常会遇到这种情况:某处有一个多行文本,我们要把他复制到代码中用来初始化一个
数组。 大部分时候我们会这么做:
- 写好数组声明;
- 把内容复制到中括号内(大概长成下面那段文本的样子)
- 然后行首加
'
行尾加',
,重复直到最后一行(想象一下这段文本有 50 行)
有了 Vim 块操作就不用这么麻烦了,按
014gg
,然后跟着选中那一行的指示操作。
var myArray = [
Ctrl-v 进入块操作,$ 到行尾,j 到下一行(做!)。
按 j 到下一行
下面还好多行,干脆来个 4j 多跳几行
https://www.yahaha.net
https://www.yahaha.net
以后看好行号再跳!现在按 A 插入,然后输入 <单引号><逗号><Esc> 完成第一步。
// Oops... 跳多了,没事,按 k 回到上一行
];
现在已经完成了第一步,还需要补前面的
'
,按14gg
回到那一行,再操作一次,但
是这次有三个地方要变化一下:
- 第一行按
$
时改按0
,因为这次要在行首插入;- 末行按
A
时改按I
,块操作中A
是字符后插入,I
是字符前插入;- 最后按
<单引号><Esc>
。最后再做些收尾工作,
19gg$x
删掉最后一行结尾处的,
,然后14gg7==
把代码缩
进一下。Done!
注意:选择行首行尾的操作也可以在选择完要处理的内容之后执行,即
Ctrl-v jjj$A',<Esc>
接下来我们说说 Vim 中的宏。
第七章:Vim 中的宏
宏操作在 Vim 中(甚至任何编辑器中)属于比较复杂的操作了,如果前面的内容都已经掌
握了,那么你已经可以算是一个 Vim 高手了,所以,这位高手,我们不妨再来进阶一下吧
。
还记得上一章中把文本转成数组的例子吧,我们还做同样的事,不过这次
是用宏来操作。
14gg
跳转到准备开始处理的起始行,按指示进行操作,先看效果后解释。
var myArray = [
按 qa 开启宏录制,前方高能,连续按 I<单引号><Esc>A<单引号><逗号><Esc>jq7@a
我也要
我也要
我也要
我也要
我也要
我也要
我也要
];
OMG! 发生了什么,有没有惊出一身冷汗,之前两次块操作的结果瞬间就完成了,最后再简
单做些收尾工作,去掉最后一行的逗号,集体缩进一下,搞定!
下面来解释一下刚才的操作:
q
是开启录制宏,a
是给这次宏的录制过程一个存储位置,可以是 0-9 或 a-z;- 然后
I<单引号><Esc>A<单引号><逗号><Esc>j
是你这次录制的整个宏的操作过程,意
思就是行首插入单引号,行尾插入单引号和逗号,跳到下一行; - 接下来的
q
是结束本次宏的录制; @
是唤起宏,a
是要唤起的宏的名字(存储位置),前面的7
你应该明白吧,就
是执行 7 次。
Tips:@@
再次唤起最后一次执行的宏。
再次感谢您的关注!如果爱,请分享。爱生活,爱 VIM!