热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

VIM技巧之分隔窗口

分割窗口最简单的打开新窗口命令是如下::split这个命令把屏幕分解成两个窗口并把光标置于上面的窗口中:+----------------------------------+|/*fileone.c*/||~||~||one.c=============================||/*fileone.c*/|
分割窗口

最简单的打开新窗口命令是如下:

: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 会显示一个错误信息,并且那个窗口不会被关闭。


用另一个文件分割窗口

下面命令打开另一个窗口并用该窗口编辑另一个指定的文件:

:split two.c

如果你在编辑 one.c,则命令执行的结果是:

+----------------------------------+
|/* file two.c */ |
|~ |
|~ |
|two.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+

要打开窗口编辑一个新文件,可以使用如下命令:

:new

你可以重复使用 ":split" 和 ":new" 命令建立任意多的窗口。


窗口大小

: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' 选项使所有的窗口在关闭或者打开新窗口的时候总保持相同大小。


垂直分割

":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|。


移动窗口

你已经分割了一些窗口,但现在的位置不正确。这时,你需要一个命令用于移动窗口。例如,你已经打开了三个窗口,象这样:

+----------------------------------+
|/* 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 把当前窗口移到最右边


对所有窗口执行命令

你打开了几个窗口,现在你想退出 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" 以垂直分割的方法打开窗口。


 用 vimdiff 显示区别

有一种特殊的启动 Vim 的方法可以用来显示两个文件的区别。让我们打开一个 "main.c"并插入一些字符。在设置了 'backup' 选项的情况下保存这个文件,以便产生 "main.c~"备份文件。
在命令行中输入如下命令:(不是在Vim中)

vimdiff main.c~ main.c

Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。

VV VV
+-----------------------------------------+
|+ +--123 lines: /* a|+ +--123 lines: /* a| <- 折叠
| text | text |
| text | text |
| text | text |
| text | changed text | <- 修改过的行
| text | text |
| text | ------------------| <- 删除的行
| text | text |
| text | text |
| text | text |
|+ +--432 lines: text|+ +--432 lines: text| <- 折叠
| ~ | ~ |
| ~ | ~ |
|main.c~==============main.c==============|
| |
+-----------------------------------------+

(这幅图没有显示出加亮效果,可以使用 vimdiff 命令看到更好的效果)

那些没有修改的行会被折叠成一行,这称为 "关闭的折叠"(closed fold)。上图
中由 "<- 折起" 标记的行就是一个用一行表示123行的折叠。这些行在两个文件中完全相同。标记为 "<- 修改过的行" 被高亮显示,而增加的行被用另一种颜色表示。这可以很清楚地表示出两个文件间的不同。被删除的行在 main.c 窗口中用 "---" 显示,如图中用 "<- 删除的行" 标记的行。这些字符并不是真的存在。它们只是用于填充 main.c,以便与另一个窗口对齐。


折 叠 栏

每个窗口在左边都有一个颜色略有不同的显示栏,图中标识为 "VV"。你会发现每个折叠在那个位置都有一个加号。把鼠标移到那里并按左键可以打开那个折起,从而让你看到里面的内容。对于打开的折叠,折叠栏上会出现一个减号。如果你单击那个减号,折叠会被重新关闭。当然,这只能在你有鼠标的情况下使用。如果你没有,可以用 "zo" 打开一个折叠。关闭使用 "zc"。


用 Vim 做 比 较

启动比较模式的另一种方法是从 Vim 内部开始:编辑 "main.c" 文件,然后分割窗口显示区别:

: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| 。


杂项

'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 窗口的最下面或者最右边
推荐阅读
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • vsftpd配置(虚拟用户、匿名用户登录)
    一、ftp服务搭建(一)概述1.ftp连接及传输模式(1)控制连接TCP21,用于发送FTP命令信息 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 如何在Windows内置的Ubuntu系统中更改SSH服务的端口号设置
    如何在Windows内置的Ubuntu系统中更改SSH服务的端口号设置 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 如何正确删除软链接:专业指南与操作步骤
    本文将详细介绍如何正确删除软链接,提供专业的操作指南和步骤。首先,我们将创建一个示例文件夹和文件,以便演示具体的操作过程。通过 `mkdir test_chk` 创建一个名为 `test_chk` 的文件夹,然后使用 `touch test_chk/test.txt` 命令在该文件夹中生成一个空文件 `test.txt`。接下来,我们将逐步讲解如何安全地删除软链接,确保不会对原始文件造成影响。 ... [详细]
  • 本文详细介绍了VIM的基础操作和常用快捷键,VIM作为Unix及类Unix系统中的一款经典文本编辑器,源自VI的改进与发展。其简洁的界面和强大的扩展性使其在开发者中备受青睐,同时也催生了多个适用于Windows平台的版本。通过图文并茂的方式,帮助读者快速掌握VIM的核心功能与使用技巧。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • Linux基础知识:Vi与Vim编辑器详解
    Linux基础知识:Vi与Vim编辑器详解 ... [详细]
  • 对于希望在未越狱的iOS设备上修改Hosts文件的苹果用户来说,了解文件的具体位置和操作步骤至关重要。本文将详细介绍如何通过安装最新版本的iTunes来实现这一目标,并提供实用的操作指南,帮助用户轻松完成Hosts文件的编辑。 ... [详细]
author-avatar
lan1998_789
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有