Vim命令.docx
- 文档编号:8202778
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:30
- 大小:34.66KB
Vim命令.docx
《Vim命令.docx》由会员分享,可在线阅读,更多相关《Vim命令.docx(30页珍藏版)》请在冰豆网上搜索。
Vim命令
VIM参考手册
Stone发表于2007-04-0209:
25:
19
*ForVimversion7.0. 最后更新:
2006年4月
VIM 参考手册 作者:
BramMoolenaar
译者:
Dasn
使用多个窗口和缓冲区进行编辑 *windows**buffers*
本章我们看一下操作多个窗口和缓冲区的命令。
另外有些命令在操作多个窗口的时候不同
于单个窗口,这些命令也会在本章被介绍。
一些基本的内容在用户手册的第7、8两个章节里|usr_07.txt||usr_08.txt|已经介
绍过了。
1. 简介 |windows-intro|
2. 启动Vim |windows-starting|
3. 打开和关闭窗口 |opening-window|
4. 把光标移动到另一个窗口 |window-move-cursor|
5. 移动窗口 |window-moving|
6. 改变窗口大小 |window-resize|
7. 参数和缓冲区列表的命令 |buffer-list|
8. 在所有的缓冲区和窗口里执行命令 |list-repeat|
9. 当前光标处的标签和文件名 |window-tag|
10.预览窗口 |preview-window|
11.使用隐藏缓冲区 |buffer-hidden|
12.特殊类型缓冲区 |special-buffers|
{Vi没有这些命令}
{仅当编译时加入|+windows|特性才能使用多窗口功能}
{仅当编译时加入|+vertsplit|特性才能使用垂直分割窗口功能}
1.简介*windows-intro**window*
"窗口"被用来查看缓冲区里的内容。
你可以用多个窗口观察同一个缓冲区,也可以用多
个窗口观察不同的缓冲区。
"缓冲区"是一块内存区域,里面存储着正在编辑的文件。
如果没有把缓冲区里的文件存
盘,那么原始文件不会被更改。
缓冲区的状态可以是下述三种情况之一:
*active-buffer*
激活:
缓冲区的内容在窗口里显示。
如果该缓冲区是针对某一个文件创建的,那么该
文件已经被读入缓冲区。
如果缓冲区被更改过,其内容便会与原文件不同。
*hidden-buffer*
隐藏:
缓冲区的内容不被显示。
如果该缓冲区是针对某一个文件创建的,那么该文件
已经被读入缓冲区。
除此以外,与激活状态一样,只是你看不见它。
*inactive-buffer*
非激活:
缓冲区的内容不被显示,也不包含任何数据。
如果曾经载入过文件,与该缓冲
区相关的选项会被记住。
它可以包括来自|viminfo|文件的位置标记,但是
这种缓冲区不包含文本。
用一个表来说明:
状态在窗口显示文件载入":
buffers"命令显示
激活是是'a'
隐藏否是'h'
非激活否否''
备注:
所有的CTRL-W命令都可以用|:
wincmd|执行,当我们不能输入普通模式命令,
或者输入不方便时可以试一下。
主Vim窗口可以容纳多个分割的窗口。
此外还有标签页|tab-page|,每个标签页能容纳
多个窗口。
2.启动Vim*windows-starting*
在默认情况下,与Vi类似,Vim启动后只打开一个窗口。
参数"-o"和"-O"可以让Vim为参数列表里的每一个文件打开一个窗口。
参数"-o"
水平分割窗口;参数"-O"垂直分割窗口。
如果"-o"和"-O"都用了,那么最后一个参
数决定分割的方向。
例如,下面的例子打开三个水平分割的窗口:
vim-ofile1file2file3
参数"-oN",这里的N是一个十进制数,用这个参数可以打开N个水平分割的窗口。
如果文件名的个数多于窗口数目,则只打开N个窗口,这样有一些文件就得不到窗口来
显示。
如果指定的窗口数多于文件的个数,那么后面的几个窗口会编辑空的缓冲区。
同
样,"-ON"打开N个垂直分割的窗口,相应的规则与"-oN"相同。
如果你打开了很多的文件,每个窗口都会便得很小。
你可能需要设置'winheight'和
'winwidth'选项来创建一个适合工作的环境。
Buf/WinEnter/Leave等自动命令|autocommand|不会在打开窗口或读取文件时运行,
只有在真正进入缓冲区后才会执行。
*status-line*
状态行用来分割窗口。
选项'laststatus'用来设置最后一个窗口在什么时候可以有状态
栏:
'laststatus'=0永远不会有状态行
'laststatus'=1窗口数多于一个的时候
'laststatus'=2总是显示状态行
你可以通过设置'statusline'选项来改变状态行的内容。
此选项可以局部于窗口,所以
你可以为每个窗口设置不同的状态行。
通常状态行用反色显示。
你可以通过修改'highlight'选项中的's'字符来改变。
例
如,"sb"设置为粗体字。
如果状态行没有启用高亮("sn"),那么字符'^'表示当前窗
口,字符'='表示其它窗口。
如果支持鼠标并且已经通过设置'mouse'选项使之启动,
那么你可以用鼠标拖动状态行以改变窗口的大小。
备注:
如果你想让状态行以反色显示,但是没有效果。
查看一下'highlight'选项是否
包含了"si"。
在3.0版本里,这意味着逆转(invert)状态行。
但是现在应该使用
"sr",反转(reverse)状态行,因为"si"现在表示斜体(italic)!
如果你的终端不支
持斜体,那么状态行还是会以反色显示;这种问题只会出现在有斜体的termcap码的终
端上。
3.打开和关闭窗口*opening-window**E36*
CTRL-Ws*CTRL-W_s*
CTRL-WS*CTRL-W_S*
CTRL-WCTRL-S*CTRL-W_CTRL-S*
:
[N]sp[lit][++opt][+cmd]*:
sp**:
split*
把当前窗口分割成两个,结果是两个窗口显示同一个文件。
新打开的窗
口高度为N(默认值是当前窗口高度的一半)。
减少当前窗口的高度,
空出地方给新的窗口(如果你置位了'equalalways'选项,并且
'eadirection'没有设置为"hor"的话,其它窗口也被影响)。
备注:
不是在所有的终端都能使用CTRL-S,并且可能导致不能继续输
入,遇到这种情况,用CTRL-Q继续。
参见|++opt|和|+cmd|。
CTRL-WCTRL-V*CTRL-W_CTRL-V*
CTRL-Wv*CTRL-W_v*
:
[N]vs[plit][++opt][+cmd][file]*:
vs**:
vsplit*
与|:
split|类似,但垂直分割窗口。
如果打开了'equalalways'选
项,并且选项'eadirection'没有设置为"ver",窗口会被均匀地水
平铺开,除非你给出了指定窗口宽度的参数。
备注:
在其它地方CTRL-Q与CTRL-V相同,但是在这里不是!
CTRL-Wn*CTRL-W_n*
CTRL-WCTRL_N*CTRL-W_CTRL-N*
:
[N]new[++opt][+cmd]*:
new*
创建一个新窗口并且开始编辑一个空文件。
新窗口的高度为N(默认值
为现存高度的一半)。
减少当前窗口的高度,为新窗口留出空间(如果
你打开了'equalalways'选项,并且'eadirection'没有设置为
"hor",其它窗口也会被影响)。
参见:
|++opt|and|+cmd|。
如果设置了'fileformats'选项,那么新缓冲区会使用其中的第一个
格式。
如果'fileformats'为空,那么使用当前缓冲区的
'fileformat'值。
这个值可以被|++opt|参数覆盖。
自动命令以如下顺序被执行:
1.在当前窗口执行WinLeave
2.在新窗口里执行WinEnter
3.在当前缓冲区执行BufLeave
4.在新缓冲区执行BufEnter
这跟先执行":
split",再执行一个":
e"命令的效果差不多。
:
[N]vne[w][++opt][+cmd][file]*:
vne**:
vnew*
与|:
new|命令相似,但是它垂直分割窗口,如果打开了
'equalalways'选项,并且选项'eadirection'没有设置为"ver",
窗口会被均匀地水平铺开,除非你给出了指定窗口宽度的参数。
:
[N]new[++opt][+cmd]{file}
:
[N]sp[lit][++opt][+cmd]{file}*:
split_f*
创建一个新的窗口,并且开始编辑文件{file}。
如果使用了[+cmd]
参数,文件加载完毕后会执行命令|+cmd|。
也参见:
|++opt|。
新窗口的高度为N(默认值为现存高度的一半)。
减少当前窗口的高
度,为新窗口留出空间(如果你打开了'equalalways'选项,其它窗
口也会被影响)。
:
[N]sv[iew][++opt][+cmd]{file}*:
sv**:
sview**splitview*
与":
split"命令相同,但是会给缓冲区置位'readonly'选项。
:
[N]sf[ind][++opt][+cmd]{file}*:
sf**:
sfind**splitfind*
与":
split"命令相同,但是会在'path'里寻找{file}。
如果找不
到,就不会分割窗口。
CTRL-WCTRL-^*CTRL-W_CTRL-^**CTRL-W_^*
CTRL-W^执行":
split#"命令,把窗口分成两个,并且编辑轮换文件。
如果指
定了计数,就变成了":
split#N",分割窗口,并且编辑第N个缓冲
区。
注意'splitbelow'和'splitright'选项会影响新窗口的位置。
*:
vert**:
vertical*
:
vert[ical]{cmd}
执行{cmd}。
如果包含一个分割窗口的命令,那么将垂直分割窗口。
:
lefta[bove]{cmd}*:
lefta**:
leftabove*
:
abo[veleft]{cmd}*:
abo**:
aboveleft*
执行{cmd}。
如果包含一个分割窗口的命令,那么将从当前窗口的左
(垂直分割)或者上方(水平分割)分割窗口,而忽略'splitbelow'
和'splitright'的设置。
:
rightb[elow]{cmd}*:
rightb**:
rightbelow*
:
bel[owright]{cmd}*:
bel**:
belowright*
执行{cmd}。
如果包含一个分割窗口的命令,那么将从当前窗口的右
(垂直分割)或者下方(水平分割)分割窗口,而忽略'splitbelow'
和'splitright'的设置。
*:
topleft**E442*
:
to[pleft]{cmd}
执行{cmd}。
如果包含一个分割窗口的命令,那么该窗口出现在顶部,
并且占据最大宽度。
当垂直分割窗口时,窗口出现在最左边,并且占据
最大高度。
*:
botright*
:
bo[tright]{cmd}
执行{cmd}。
如果包含一个分割窗口的命令,那么该窗口出现在底部,
并且占据最大宽度。
当垂直分割窗口时,窗口出现在最右边,并且占据
最大高度。
这些修饰符可以结合使用来打开一个垂直分割的并且占据最大高度的窗口:
:
verticaltopleftedittags
在Vim窗口最左边打开一个垂直分割的、最大高度的窗口,用来编辑tags文件。
关闭窗口
CTRL-Wq*CTRL-W_q*
CTRL-WCTRL-Q*CTRL-W_CTRL-Q*
:
q[uit]退出当前窗口。
如果退出的是最后一个窗口(不包括帮助窗口),就会
退出Vim。
如果置位了'hidden'并且只有此一个窗口监视当前缓冲区,那么该缓
冲区被隐藏。
如果没有置位'hidden',并且只有当前这一个窗口监视该缓冲区,而
且缓冲区被修改了,那么该命令不会成功。
(注意:
CTRL-Q不是在所有的终端下都好用)
:
q[uit]!
退出当前窗口。
如果这是缓冲区的最后一个窗口,那么对于此缓冲区的
改动将全部丢失。
如果退出的是最后一个窗口(不包括帮助窗口),就
会退出Vim。
缓冲区里的全部内容将丢失。
即使置位了'hidden'选项
也是如此。
CTRL-Wc*CTRL-W_c**:
clo**:
close*
:
clo[se][!
]关闭当前窗口。
如果置位了'hidden',或者改动了缓冲区但是命令里
用了[!
],缓冲区会被隐藏(除非还有一个窗口在编辑该缓冲区)。
如果当前标签页只有一个窗口而且有其它标签页,关闭当前标签页。
|tab-page|。
该命令在下述情况下会失败:
*E444*
-屏幕上只剩下最后一个窗口的时候。
-当'hidden'没有置位,也没有用[!
],并且缓冲区也已经被修改,
而且也没有其它窗口监视该缓冲区的时候。
对缓冲区的改动既不写入文件,也不会丢失,所以这是个"安全"的命
令。
CTRL-WCTRL-C*CTRL-W_CTRL-C*
你可能会认为CTRL-WCTRL-C关闭当前窗口,但是这不行,因为
CTRL-C会撤消整个命令。
*:
hide*
:
hid[e]除非是屏幕上的最后一个窗口,退出当前窗口,缓冲区被隐藏起来
(除非还有另一个窗口正在编辑它,或者'bufhidden'设置为
"unload"或"delete")。
如果这是当前标签页的最后一个窗口,关闭此标签页。
|tab-page|
此命令不受'hidden'的值影响。
对缓冲区的改动既不写入文件,也不会丢失,所以这是个"安全"的命
令。
:
hid[e]{cmd}执行{cmd},其间置位'hidden'选项。
{cmd}执行完毕后,先前的
'hidden'选项会被恢复。
例如:
:
hideeditMakefile
编辑"Makefile"文件,如果当前缓冲区有改动的话,隐藏之。
CTRL-Wo*CTRL-W_o**E445*
CTRL-WCTRL-O*CTRL-W_CTRL-O**:
on**:
only*
:
on[ly][!
]使当前窗口成为屏幕上唯一的窗口。
其它窗口都关闭。
如果置位了'hidden'选项,被关闭窗口里的所有缓冲区变成隐藏。
如果没有置位'hidden',但是置位了'autowrite'选项,那么已经更
改的缓冲区被写入文件。
否则,除非使用[!
]强制关闭,那些包含修
改过的缓冲区的窗口不被删除,它们转入隐藏状态。
因为修改过的缓冲
区永远不会被放弃,缓冲区的改动也永远不会丢失。
4.把光标移动到另一个窗口*window-move-cursor*
CTRL-W
CTRL-WCTRL-J*CTRL-W_CTRL-J**CTRL-W_j*
CTRL-Wj把光标向下移动N个窗口。
用光标的位置在若干窗口之间做出选择。
CTRL-W
CTRL-WCTRL-K*CTRL-W_CTRL-K**CTRL-W_k*
CTRL-Wk把光标向上移动N个窗口。
用光标的位置在若干窗口之间做出选择。
CTRL-W
CTRL-WCTRL-H*CTRL-W_CTRL-H*
CTRL-W
CTRL-Wh把光标向左移动N个窗口。
用光标的位置在若干窗口之间做出选择。
CTRL-W
CTRL-WCTRL-L*CTRL-W_CTRL-L**CTRL-W_l*
CTRL-Wl把光标向右移动N个窗口。
用光标的位置在若干窗口之间做出选择。
CTRL-Ww*CTRL-W_w**CTRL-W_CTRL-W*
CTRL-WCTRL-W如果没有添加计数,则将光标移动到当前窗口的右/下方的窗口。
如果
右/下方没有窗口,就移动到左上角的窗口。
要是添加了计数,就移动到第N个窗口(从左上方到右下方依次计
数)。
窗口号可以通过|bufwinnr()|和|winnr()|来获得。
*CTRL-W_W*
CTRL-WW如果没有添加计数,则将光标移动到当前窗口的左/上方的窗口。
如
果左/上方没有窗口,就移动到右下角的窗口。
要是添加了计数,就移动到第N个窗口(从左上方到右下方依次计
数)。
CTRL-Wt*CTRL-W_t**CTRL-W_CTRL-T*
CTRL-WCTRL-T把光标移动到左上角的窗口。
CTRL-Wb*CTRL-W_b**CTRL-W_CTRL-B*
CTRL-WCTRL-B把光标移动到右下角的窗口。
CTRL-Wp*CTRL-W_p**CTRL-W_CTRL-P*
CTRL-WCTRL-P移动到前一个(previous)(上次访问的)窗口。
*CTRL-W_P**E441*
CTRL-WP移动到预览窗口。
如果没有预览窗口就会出错。
{仅当编译时加入|+quickfix|特性才有效}
在可视模式下,如果新窗口编辑的是同一个缓冲区,则设置光标位置使得相同的区域被选
择。
如果不是同一个缓冲区,则终止可视模式。
*:
winc**:
wincmd*
这些命令也可以用":
wincmd"来执行:
:
[count]winc[md]{arg}
与CTRL-W[count]{arg}相同。
例如:
:
wincmdj
把光标移动到当前窗口下面的窗口。
这个命令在普通模式不可用的时候(比如在|CursorHold|自动命令执
行的时候),或者在启用普通模式不方便时,特别好用。
计数也可以是一个窗口号。
例如:
:
exenr."wincmdw"
这会切换到窗口"nr"。
5.移动窗口*window-moving*
CTRL-Wr*CTRL-W_r**CTRL-W_CTRL-R**E443*
CTRL-WCTRL-R向右/下方向旋转窗口。
第一个窗口变成第二个,第二个变成第三个……
最后一个变成第一个。
光标保留在相同窗口里。
本操作只在和当前窗口同行或同列的窗口间移动。
*CTRL-W_R*
CTRL-WR向左/上方向旋转窗口。
第二个窗口变成第一个,第三个变成第二个……
第一个变成最后一个。
光标保留在相同窗口里。
本操作只在和当前窗口同行或同列的窗口间移动。
CTRL-Wx*CTRL-W_x**CTRL-W_CTRL-X*
CTRL-WCTRL-X若没有计数:
交换当前窗口与下一个窗口。
如果没有下一个窗口,则
与前一个窗口交换。
若有计数:
交换当前窗口与第N个窗口(第一个窗口为1)。
光标被放
置在那个窗口里。
如果既有垂直分割又有水平分割,那么只能与当前窗口同行或者同列的
窗口进行交换。
下面的几个命令可以被用来改变窗口的布局。
例如,CTRL-WK可以把两个垂直分割的窗
口变成水平分割的窗口。
CTRL-WH则正好相反。
*CTRL-W_K*
CTRL-WK把当前窗口放到最顶端,并且是最大宽度。
这很像在关闭当前窗口之
后,再用":
topleftsplit"打开一个新的窗口,不过新窗口会包含当
前窗口的内容。
*CTRL-W_J*
CTRL-WJ把当前窗口放到最底部,并且是最大宽度。
这很像在关闭当前窗口之
后,再用":
botrightsplit"打开一个新的窗口,不过新窗口会包含
当前窗口的内容。
*CTRL-W_H*
CTRL-WH把当前窗口放到最左边,并且是最大高度。
这很像在关闭当前窗口之
后,再用":
verttopleftsplit"打开一个新的窗口,不过新窗口会
包含当前窗口的内容。
{仅当编译时加入+vertsplit特性才有效}
*CTRL-W_L*
CTRL-WL把当前窗口放到最右边,并且是最大高度。
这很像在关闭当前窗口之
后,再用":
vertbotrightsplit"打开一个新的窗口,不过新窗口会
包含当前窗口的内容。
{仅当编译时加入+vertsplit特性才有效}
*CTRL-W_T*
CTRL-WT把当前窗口移到一个新的标签页上。
如果当前标签页只有一个窗口,此
命令失败。
如果给出计数,打开的新标签页会出现在该索引给出的标签页之前。
否
则,它出现在当前标签页之后。
6.改变窗口大小*window-resize*
*CTRL-W_=*
CTRL-W=使得所有窗口(几乎)等宽、等高,但当前窗口使用'winheight'和
'winwidth'。
:
res[ize]-N*:
res**:
resize**CTRL-W_-*
CTRL-W-使得当前窗口高度减N(默认值是1)。
如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Vim 命令
![提示](https://static.bdocx.com/images/bang_tan.gif)