vim 笔记整理
Ctrl+f 向后翻一屏 forward
Ctrl+d 向后翻半屏 down
Ctrl+b 向前翻一屏before
Ctrl+u 向后翻半屏 up
/, Ctrl-r,Ctrl-a 搜索当前光标处的单词
gg到第一行的行首(H)
G 到最后一行的行首 (L)
M到中间一行的行首
0到行首,
$移动到行尾
^ 移动到本行第一个非空的字符
g_移动到本行最后一个非空的字符
dd 剪切正行
dG 剪切全文
ggyG 复制全文
ggvG 高亮全文
d$剪切至行尾
d0,或者d^ 剪切至行首
p 粘贴
o 在本行的下一行另起一行,开始输入
O 在本行的上一行另起一行,开始输入
a 光标后输入字符
i 光标前输入字符
A 行尾输入字符
I 行首输入字符
cw 从光标开始出替换,到下一个单词开始 ,如果光标在单词第一个字母,则替换整个单词
guw 所在单词变为小写
gUw所在的单词变为大写
guu 行小写
gUU行大写
*向下,或者#向上, 寻找光标出的单词(精确查找,全字匹配),配合n移动到下一个,上一个
g*,向下或者g#向上 寻找光标出的单词,(非圈子匹配,包含即可)配合n移动到下一个,上一个
:sp 打开多个文件
:bn 在打开的多个文件间切换,注意:切换之前需要(:w)保存之前的编辑
. 重复上次的命令,
n<command> 重复上次的命令N次
Ctrl-v 列模式
Ctrl-v列模式选择好以后,c 然后输入替换后的文本,ESC应用到所选的行
v 高亮,选择多行
<>缩进和范缩进
ta 跳到下一个a 字符前面的字符
fa 跳到下一个a 字符
fa 跳到下一个a 字符
w向后移动一个单词
b向前移动一个单词
:X 加密码
:m n ---- 当前行 移动到(目前第)n行的内容的下面
: x,y move n ---- x,y 行之间的内容移动到(目前第)n行的内容的下面
:m +1 ---- 当前行往下移动一行(即:往下面数一行的下面)
:m -2 ---- 当前行往上移动一行(即:往上面数两行的下面一行)
只要记住:移动都是指移动到制定行的下面
Ctrl+g: 显示编辑的当前文件名
1、Ctrl-g: 显示全路径和文件名
多文档编辑
打开多个文件:
1.vim还没有启动的时候:在终端里输入
vim file1 file2 ... filen便可以打开所有想要打开的文件
2.vim已经启动
输入
:open file
可以再打开一个文件,并且此时vim里会显示出file文件的内容。
同时显示多个文件:
:split
:vsplit
在文件之间切换:
1.文件间切换
Ctrl+6—下一个文件
:bn—下一个文件
:bp—上一个文件
对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。
2.在窗格间切换的方法
Ctrl+w+方向键——切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向后切换到下一个窗格中
打开新窗口最简单的命令如下:
:split这个命令把屏幕分解成两个窗口并把光标置于上面的窗口中:
+----------------------------------+
|/* file one.c */ |
|~ |
|~ |
|one.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
你可以看到显示同一个文件的两个窗口。带 "====" 的行是状态条,用来显示它上面的窗
口的信息。(在实际的屏幕上,状态条用反色显示)
这两个窗口允许你同时显示一个文件的两个部分。例如,你可以让上面的窗口显示变
量定义而下面的窗口显示使用这些变量的代码。
CTRL-W w 命令可以用于在窗口间跳转。如果你在上面的窗口,它会跳转到下面的窗口,
如果你在下面的窗口,它会跳转到上面的窗口。(CTRL-W CTRL-W 可以完成相同的功能这
是为了避免你有时按第二次的时候从 CTRL 键上缩手晚了。)
关 闭 窗 口
以下命令用于关闭窗口:
:close
实际上,任何退出编辑的命令都可以关闭窗口,象 ":quit" 和 "ZZ" 等。但 "close" 可
以避免你在剩下一个窗口的时候不小心退出 Vim 了。
关 闭 所 有 其 它 窗 口
如果你已经打开了一整套窗口,但现在只想编辑其中一个,如下命令可以完成这个功能:
:only
这个命令关闭除当前窗口外的所有窗口。如果要关闭的窗口中有一个没有存盘,Vim 会显
示一个错误信息,并且那个窗口不会被关闭。
*08.2* 用另一个文件分割窗口
下面命令打开另一个窗口并用该窗口编辑另一个指定的文件:
:split two.c
如果你在编辑 one.c,则命令执行的结果是:
+----------------------------------+
|/* file two.c */ |
|~ |
|~ |
|two.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
要打开窗口编辑一个新文件,可以使用如下命令:
:new
你可以重复使用 ":split" 和 ":new" 命令建立任意多的窗口。
*08.3* 窗口大小
:split 命令可以接受计数前缀。如果指定了这个前缀,这个数将作为窗口的高度。例如
如下命令可以打开一个三行的窗口并编辑文件 alpha.c:
:3split alpha.c
对于已经打开的窗口,你可以用有几种方法改变它的大小。如果你有鼠标,很简单:把鼠
标指针移到分割两个窗口的状态栏上,上下拖动即可。
要扩大窗口:
CTRL-W +
要缩小窗口:
CTRL-W -
这两个命令接受计数前缀用于指定扩大和缩小的行数。所以 "4 CTRL-W +" 会使窗口增高
4 行。
要把一个窗口设置为指定的高度,可以用这个命令:
{height}CTRL-W _
就是先输入一个数值,然后输入 CTRL-W 和一个下划线 (在美式英语键盘中就是 Shift
加上 "-")。
要把一个窗口扩展到尽可能大,可以使用无计数前缀的 CTRL-W _ 命令。
使 用 鼠 标
在 Vim 中,你可以用键盘很快完成很多工作。但很不幸,改变窗口大小要敲不少键。在
这种情况下,使用鼠标会更快一些。把鼠标指针移到状态条上,按住左键并拖动。状态条
会随之移动,这会使一个窗口更大一个更小。
选 项
’winheight’ 选项设置最小的期望窗口高度而 ’winminheight’ 选项设置最小的 "硬性"
高度。
同样,’winwidth’ 设置最小期望宽度而 ’winminwidth’ 设置最小硬性宽度。
’equalalways’ 选项使所有的窗口在关闭或者打开新窗口的时候总保持相同大小。
*08.4* 垂直分割
":split" 命令在当前窗口的上面建立窗口。要在窗口左边打开新窗口,用这个命令:
:vsplit
或者
:vsplit two.c
这个命令的结果如下:
+--------------------------------------+
|/* file two.c */ |/* file one.c */ |
|~ |~ |
|~ |~ |
|~ |~ |
|two.c===============one.c=============|
| |
+--------------------------------------+
实际中,中间的竖线会以反色显示。这称为垂直分割线。它左右分割一个窗口。
还有一个 "vnew" 命令,用于打开一个垂直分割的新窗口。还有一种方法是:
:vertical new
"vertical" 命令可以放在任何分割窗口的命令的前面。这会在分割窗口的时候用垂直分
割取代水平分割。(如果命令不分割窗口,这个前缀不起作用)。
在 窗 口 间 跳 转
由于你可以用垂直分割和水平分割命令打开任意多的窗口,你就几乎能够任意设置窗口的
布局。接着,你可以用下面的命令在窗口之间跳转:
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口
CTRL-W t 跳转到最顶上的窗口
CTRL-W b 跳转到最底下的窗口
你可能已经注意到这里使用移动光标一样的命令用于跳转窗口。如果你喜欢,改用方向
键也行。
还有其它命令可以跳转到别的窗口,参见:|
Q_wi
|。
*08.5* 移动窗口
你已经分割了一些窗口,但现在的位置不正确。这时,你需要一个命令用于移动窗口。
例如,你已经打开了三个窗口,象这样:
+----------------------------------+
|/* file two.c */ |
|~ |
|~ |
|two.c=============================|
|/* file three.c */ |
|~ |
|~ |
|three.c===========================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
显然,最后一个窗口应该在最上面。移动到那个窗口 (用 CTRL-W w) 并输入如下命令:
CTRL-W K
这里使用大写的 K。这样窗口将被移到最上面。你可以注意到,这里又用 K 表示向上移
动了。
如果你用的是垂直分割,CTRL-W K 会使当前窗口移动到上面并扩展到整屏的宽度。
假设你的布局如下:
+-------------------------------------------+
|/* two.c */ |/* three.c */ |/* one.c */ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|two.c=========three.c=========one.c========|
| |
+-------------------------------------------+
当你在中间的窗口 (three.c) 中使用 CTRL-W K 后,结果会是:
+-------------------------------------------+
|/* three.c */ |
|~ |
|~ |
|three.c====================================|
|/* two.c */ |/* one.c */ |
|~ |~ |
|two.c==================one.c===============|
| |
+-------------------------------------------+
还有三个相似的命令 (估计你已经猜出来了):
CTRL-W H 把当前窗口移到最左边
CTRL-W J 把当前窗口移到最下边
CTRL-W L 把当前窗口移到最右边
*08.6* 对所有窗口执行命令
你打开了几个窗口,现在你想退出 Vim,你可以分别关闭每一个窗口。更快的方法是:
:qall
这表示 "quit all" (全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时光
标会自动跳到那个窗口,你可以用 ":write" 命令保存该文件或者 ":quit!" 放弃修改。
如果你知道有窗口被改了,而你想全部保存,则执行如下命令:
:wall
这表示 "write all" (全部保存)。但实际上,它只会保存修改过的文件。Vim 知道保存
一个没有修改过的文件是没有意义的。
另外,还有 ":qall" 和 "wall" 的组合命令:
:wqall
这会保存所有修改过的文件并退出 Vim 。
最后,下面的命令由于退出 Vim 并放弃所有修改:
:qall!
注意,这个命令是不能撤消的。
为 所 有 的 参 数 打 开 窗 口
要让 Vim 为每个文件打开一个窗口,可以使用 "-o" 参数:
vim -o one.txt two.txt three.txt
这个结果会是:
+-------------------------------+
|file one.txt |
|~ |
|one.txt========================|
|file two.txt |
|~ |
|two.txt========================|
|file three.txt |
|~ |
|three.txt======================|
| |
+-------------------------------+
"-o" 参数用于垂直分割窗口。
如果 Vim 已经启动了,可以使用 ":all" 命令为参数列表中的每个文件打开一个窗
口。":vertical all" 以垂直分割的方法打开窗口。
*08.7* 用 vimdiff 显示文件差异
有一种特殊的启动 Vim 的方法可以用来显示两个文件的差异。让我们打开一个 "main.c"
并插入一些字符。在设置了 ’backup’ 选项的情况下保存这个文件,以便产生 "main.c~"
备份文件。
在命令行中输入如下命令:(不是在 Vim 中)
vimdiff main.c~ main.c
Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。
VV VV
+-----------------------------------------+
|+ +--123 lines: /* a|+ +--123 lines: /* a| main.c~==============main.c==============|
| |
+-----------------------------------------+
(这幅图没有显示出高亮效果,可以使用 vimdiff 命令看到更好的效果)
那些没有修改的行会被折叠成一行,这称为 "关闭的折叠" (closed fold)。上图中
由 " :edit main.c
:vertical diffsplit main.c
":vertical" 命令使窗口用垂直的方式分割。如果你不写这个命令,结果会变成水平分
割。
如果你有一个当前文件的补丁或者 diff 文件,你可以用第三种方法启动比较模式:先编
辑这个文件,然后告诉 Vim 补丁文件的名称:
:edit main.c
:vertical diffpatch main.c diff
警告:补丁文件中必须仅包括为一个目标文件所做的补丁,否则你可能会得到一大堆错误
信息。还可能有些你没打算打补丁的文件也被打了补丁。
补丁功能只改变内存中的文件备份,不会修改你硬盘上的文件 (除非你决定写入改
动)。
滚 动 绑 定
当文件中有很多改动时,你可以用通常的方式滚动屏幕。Vim 会尽可能保持两个文件对
齐,以便你可以并排看到文件的区别。
如果暂时想关闭这个特性,使用如下命令:
:set noscrollbind
跳 转 到 修 改 的 地 方
如果你通过某种方法取消了折叠功能,可能很难找到有改动的地方。使用如下命令可以跳
转到下一个修改点:
]c
反向跳转为:
[c
加上一个计数前缀可以跳得更远。
消 除 差 异
你可以把文本从一个窗口移到另一个,并以此来消除差异,或者为其中一个文件中增加几
行。Vim 有时可能无法及时更新高亮显示。要修正这种问题,使用如下命令:
:diffupdate
要消除差异,你可以把一个高亮显示的块从一个窗口移动到另一个窗口。以上面的
"main.c" 和 "main.c~" 为例,把光标移到左边的窗口,在另一个窗口中被删除的行的位
置,执行如下命令:
:dp
这将把文字从左边拷到右边,从而消除两边的差异。"dp" 代表 "diff put"。
你也可以反过来做:把光标移到右边的窗口,移到被 "改动" 了的行上,然后执行
如下命令:
:do
这把文本从左边拷到右边,从而消除差异。
由于两个文件已经没有区别了,Vim 会把所有文字全部折叠起来。"do" 代表 "diff
obtain"。本来用 "dg" (diff get) 会更好。可是它已经有另外的意思了 ("dgg" 删除从
光标为止到首行的所有文本)。
要了解更多的比较模式的内容,参见 |
vimdiff
|。
*08.8* 杂项
’laststatus’ 选项用于指定什么时候对最后一个窗口显示状态条:
0 永远不
1 只有用分割窗口的时候 (默认)
2 永远有
很多编辑另一个文件的命令都有一个使用分割窗口的变体。对于命令行命令,这通过前置
一个 "s" 实现。例如 ":tag" 用来跳到一个标记,"stag" 就会分割出一个新窗口并跳到
那个标记。
对于普通模式,前置一个 CTRL-W 可以完成这个功能。例如,CTRL-^ 跳到轮换文
件,而 CTRL-W CTRL-^ 打开一个新窗口并编辑轮换文件。
’splitbelow’ 选项可以让新的窗口出现在当前窗口的下面。’splitright’ 选项让垂直分
割的窗口出现在当前窗口的右边。
打开一个新窗口时可以在命令前加上一个修饰符说明新窗口应该出现在什么地方:
:leftabove {cmd} 当前窗口的左上方
:aboveleft {cmd} 同上
:rightbelow {cmd} 当前窗口的右下方
:belowright {cmd} 同上
:topleft {cmd} 整个 Vim 窗口的最上面或者最左边
:botright {cmd} 整个 Vim 窗口的最下面或者最右边
*08.Array* 标签页
你会注意到窗口永远不会重叠。这意味着屏幕空间很快会用完。这个问题的解决方法叫做
标签页。
假设你正在编辑文件 "thisfile"。下面的命令可以建立新的标签页:
:tabedit thatfile
这会在一个窗口中编辑文件 "thatfile",这个窗口会占满整个 Vim 窗口。你会注意到在
顶部有一个含有两个文件名的横条:
+----------------------------------+
| thisfile | /thatfile/ __________X| (thatfile 用加粗字体出现)
|/* thatfile */ |
|that |
|that |
|~ |
|~ |
|~ |
| |
+----------------------------------+
现在,你拥有了两个标签页。第一个是文件 "thisfile" 的窗口,第二个是文件
"thatfile" 的窗口。这就像是两张重叠的纸,它们所带的的标签露在外面,显示其文件
名。
现在,使用鼠标单击顶端的 "thisfile"。结果是
+----------------------------------+
| /thisfile/ | thatfile __________X| (thisfile 用加粗字体出现)
|/* thisfile */ |
|this |
|this |
|~ |
|~ |
|~ |
| |
+----------------------------------+
你可以通过单击顶端的标签切换标签页。如果没有鼠标或者不想用它,可以使用 "gt" 命
令。助记符:Goto Tab。
现在,让我们通过下面的命令建立另一个标签页:
:tab split
这会建立一个新的标签页,包含一个窗口,编辑和刚才所在窗口中的缓冲区相同的缓冲
区:
+-------------------------------------+
| thisfile | /thisfile/ | thatfile __X| (thisfile 用加粗字体出现)
|/* thisfile */ |
|this |
|this |
|~ |
|~ |
|~ |
| |
+-------------------------------------+
在任何打开窗口的 Ex 命令前面,你都可以放上 ":tab"。这个窗口在新标签页中打开。
另一个例子:
:tab help gt
它将在新的标签页中显示关于 "gt" 的帮助。
使用标签页可以完成更多的工作:
- 在末尾标签后面的空白处单击鼠标
选择下个标签页,同 "gt"。
- 在右上角的 "X" 处单击鼠标
关闭当前标签页,除非当前标签页中的改变没有保存。
- 在标签行上双击鼠标
建立新标签页。
- "tabonly" 命令
关闭除了当前标签页以外的所有标签页,除非其它标签页中的改变没有保存。
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落
浙公网安备 33010602011771号