【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项
文章目录
- S10L45 Working with Multiple Windows
- 1 水平分割窗口
- 2 在水平分割的新窗口中显示其它文件内容
- 3 垂直分割窗口
- 4 窗口的关闭
- 5 在同一窗口水平拆分出多个窗口
- 6 关闭其余窗口
- 7 让四个文件呈田字形排列
- 8 光标在多窗口中的定位
- 9 调节子窗口的尺寸大小
- 10 变换子窗口的位置
- 11 将光标所在的子窗口分别靠进某一边
- 12 将所有缓冲区加载到当前窗口
- 13 对所有子窗口批量执行命令
- 14 关于窗口组合键的按键细节
写在前面
本篇为第十章的最后一节内容。继介绍完 Vim 缓冲区的相关知识后,本节进一步深入探讨了多窗口环境下的各类常见操作。想当年我就是直接先学了这一节内容,成功利用远程服务器的 Vim 界面完成了八个服务器节点的手动配置,要是没有多窗口这个功能,只靠缓冲区频繁切换,遇到需要同时监控某些性能指标时就傻眼了(当然这类问题有更专业的工具,这里只是举例)。今天将这些知识点完整梳理出来,以后就方便多了。
S10L45 Working with Multiple Windows
本节演示文件:vimclass/buf-{ant,bed,cat,dad}.txt
、vimclass/nav.txt
。
1 水平分割窗口
默认情况下,Vim
一个窗口只会加载一个编辑界面。即便在学习 Vim
缓冲区的概念时,也只涉及单一窗口下的各类操作;多窗口环境只在第四章介绍帮助系统时提到过,并可通过 Ctrl + WW 让光标在两个窗口间切换、用 :q
+ Enter 命令关闭某个窗口,仅此而已。
其实,Vim
还支持通过 :sp
或 :split
命令实现窗口的 水平分割。
例如,用 vim buf*
批量打开多个以 buf
开头的演示文件后,输入 :sp
+ Enter 将得到两个上下分布的相同窗口:
【图 45-1:用 sp 命令实现窗口的水平分割】
由于显示的是同一个缓冲区,在其中任一窗口修改内容都会同步影响到另一个窗口。
:sp
命令还可以等效替换为 CtrlW + S(即按住 Ctrl 的同时敲 W 键、然后放开 Ctrl 后再敲 S 键)
2 在水平分割的新窗口中显示其它文件内容
执行命令 :sp <file_name>
+ Enter 即可。
例如,让新开窗口加载 buf-bed.txt
中的内容,需输入::sp buf-bed.txt
+ Enter:
【图 45-2:在水平分割窗口时在新窗口显示指定的文件内容(buf-bed.txt)】
3 垂直分割窗口
使用 :vs
+ Enter 或 :vsplit
+ Enter。
同理,也可以使用组合键 CtrlW + V 作等效替换:
【图 45-3:使用 vs 命令实现窗口的垂直分割】
同理,执行命令 :vs <file_name>
+ Enter 可指定新窗口加载的文件内容。
4 窗口的关闭
使用命令 :q
+ Enter 或者组合键 CtrlW + Q。
5 在同一窗口水平拆分出多个窗口
多次执行 :sp <file_name>
命令即可:
【图 45-4:利用 “sp + 文件名” 的方式依次水平打开不同的文件内容】
6 关闭其余窗口
两种方式:
- 输入
:on
+ Enter 或:only
+ Enter; - 使用组合键 CtrlW + O
7 让四个文件呈田字形排列
即纵横分割窗口,先后使用水平、垂直分割(无关顺序):
- 先加载
buf-dad.txt
文件,然后执行水平分割::sp buf-bed.txt
+ Enter; - 再输入
:vs buf-ant.txt
+ Enter 垂直分割上半部分窗口; - 按两次【CtrlW + W】将光标切到下方窗口(即
buf-dad.txt
); - 输入
:vs buf-cat.txt
完成下半部分的垂直分割。
最终实测效果:
【图 45-5:用水平垂直分割实现四个文件呈田字形分布实测效果截图】
8 光标在多窗口中的定位
除了用 CtrlW + W 逐一切换光标位置,还可以使用导航键实现上下左右移动:
- CtrlW + H:光标左移;
- CtrlW + J:光标下移;
- CtrlW + K:光标上移;
- CtrlW + L:光标右移;
注意到涉及窗口操作的组合键都有相同的前缀 CtrlW。为方便后续操作,也可以使用 map
命令重新指定快捷键并写入 vimrc
配置文件:
map <C-h> <C-w>h
map <C-j> <C-w>j
map <C-k> <C-w>k
map <C-l> <C-w>l
或者利用 Leader
键重写快捷键:
map <leader>h <C-w>h
map <leader>j <C-w>j
map <leader>k <C-w>k
map <leader>l <C-w>l
如果是在图形界面下操作,还可以直接用鼠标单击快速定位。
9 调节子窗口的尺寸大小
两种方式:
- 图形界面:鼠标拖拽窗口边缘即可调整;
- 键盘操作:
- 增加高度:CtrlW + +
- 减少高度:CtrlW + -
- 增加宽度:CtrlW + >
- 减少宽度:CtrlW + <
- 高度最大化:CtrlW + _
- 宽度最大化:CtrlW + |
- 设置等宽等高:CtrlW + =
10 变换子窗口的位置
使用 CtrlW + R 可将当前水平排列的窗口依次 往右 挪动一格,最右边的窗口则挪到 最左边 位置;若子窗口均为垂直堆叠分布,则依次 往下 挪动一格,同时最下方窗口挪到 最上方 位置。
使用 CtrlW + ShiftR 则刚好反向操作:水平排列的子窗口 向左 移动、垂直堆叠的则 向上 移动。
注意:组合键中的 R 代表 Right,向右;ShiftR 则表示反向。
11 将光标所在的子窗口分别靠进某一边
通过组合键 CtrlW + 大写的导航键,还可以分别令光标所在的子窗口分别靠近大窗口的上、下、左、右侧。
例如,在刚才的田字形排列的多窗口界面,再使用 :vs nav.txt
垂直分割出第五个子窗口:
【图 45-6:在田字形多窗口界面引入第五个子窗口(左上角)】
按 CtrlW + ShiftH 实现靠左显示:
【图 45-7:让子窗口(nav.txt)靠左显示后的效果图】
按 CtrlW + ShiftL 实现靠右显示:
【图 45-8:让子窗口(nav.txt)靠右显示后的效果图】
按 CtrlW + ShiftK 实现靠上显示:
【图 45-9:让子窗口(nav.txt)靠上显示后的效果图】
按 CtrlW + ShiftJ 实现靠下显示:
【图 45-10:让子窗口(nav.txt)靠下显示后的效果图】
12 将所有缓冲区加载到当前窗口
使用命令 :ball
+ Enter 或 :ba
+ Enter。
此时 Vim
默认通过水平分割的方式加载每个子窗口:
【图 45-11:使用 ba 命令一次性加载所有缓冲区的实测效果图】
13 对所有子窗口批量执行命令
与缓冲区的 :bufdo
命令类似,多窗口也支持批量执行命令 :windo
。
例如,在垂直排列的子窗口 buf-ant.txt
和 buf-bed.txt
中,批量执行替换命令,将文件中的 #
全部替换为 @
,则相应的批量替换命令为::windo %s/#/@/g
+ Enter。
【图 45-12:对所有子窗口批量执行替换命令后的效果图】
注意
值得注意的是,
:windo
命令只对打开的子窗口生效,未打开的子窗口则不受影响 ;而:bufdo
命令则会对所有缓冲区生效,无论它是不是隐藏缓冲区都会执行命令。本例可以通过:ls
+ Enter 命令加以佐证:【图 45-13:用 ls 命令查看缓冲区列表,可以看到本例中的批量替换命令 windo 只对打开的子窗口生效】
14 关于窗口组合键的按键细节
本课涉及大量组合键,对于 CtrlW + <KEY>
的操作,既可以放开 Ctrl 键后再按后面的 <KEY>
键,也可以一直按住 Ctrl 键不放、并依次按 W 键和 <KEY>
键。
查看帮助文档 :h ctrl-w
+ Enter 可以获得更多操作说明:
【图 45-14:查看 ctrl-w 帮助文档了解组合键的更多细节说明】
需要注意的是,按住 Ctrl + S 在某些命令行中可能会引发冲突(例如暂停屏幕刷新),此时使用 Ctrl + WS 来水平拆分窗口就会失效;同理,Ctrl + WQ 也可能因为 CtrlQ 被占用而导致窗口拆分失败。不过具体问题具体分析,遇到组合键冲突,最好通过帮助文档寻求解决方案。
想了解更多关于 Vim
窗口的用法细节,可以查看 Vim
内置的帮助文档::h windows
+ Enter。
后记
从本节课开始,讲师不再提供专门的同步练习环节。因为这些内容大部分在讲解过程中就能同步操练。想要真正用好 Vim,还得自己多花心思学以致用,方为上策。切莫过分依赖课程本身,丧失了自学的主观能动性。