学习vi和vim编辑器(17):vim的多窗口功能(2)

接着上一篇文章,继续学习vim编辑器的多窗口功能。本篇文章主要学习调整窗口尺寸、缓冲区及其与窗口的交互、分页编辑、关闭与离开窗口。

调整窗口尺寸:

在gvim中,可以使用鼠标调整窗口尺寸,只需要用鼠标点击及拖动窗口边界即可。如果是在vim中,只要开启mouse选型(" :set mouse=a "),也能够用鼠标调整窗口尺寸。

窗口尺寸调整命令:

^W=:试图调整所有窗口至相同尺寸(此命令受当前的winwidth和winheight选项值的影响)。如果可用的屏幕块不能平均划分,vim也会尽可能地平均分割。

^W-:将当前窗口的高度减少一行。vim中还有一个ex命令:resize,可以明确指定欲减少的窗口尺寸。例如" :resize -n "命令可以将当前窗口减少n行。而且,即使不在一个多窗口编辑会话中(即只打开一个窗口),vim也能够减少窗口尺寸,此时空出来的屏幕面积都留给命令行窗口。

^W+:将当前窗口的高度增加一行。用" :resize +n "命令可以将当前窗口增高n行。一旦到达窗口的最大高度,使用这个命令不会再有效果。

:resize n:设置当前窗口的的高度为n行,设置值为绝对尺寸。

^W< 与 ^W>:分别能减少与增加当前窗口的宽度。

^W| :调整当前窗口至可能的最大宽度。也能够通过vertical resize n命令明确指定如何改变窗口,n定义了窗口的新宽度。

窗口尺寸调整选项:

有些vim选项能够影响上面讲解的尺寸调整命令的行为。

在窗口变为活动中(active)时,winheight和winwidth分别定义窗口的最小高度与宽度。由于vim在分割时的默认行为是平均分配,因此假设平均分割后,两个窗口的宽度都为55列。若当将winwidth调整为80,则每次vim将光标移动到某个窗口时,该窗口的宽度自动调整为80,另一个窗口则为30。这种行为非常方便,在切换窗口、切换文件时自动增加窗口的尺寸。

equalalways:让vim在分割或关闭窗口后,把窗口调整为相同尺寸。

eadirection:定义equalalways的方向,可使用的值为hor、ver、both,分别在水平、垂直、两个方向上都调整窗口尺寸为相等的。

cmdheight:设置命令行的高度。之前已经讲过,在只打开一个窗口的情况下,减少窗口的高度将增加命令行的高度。设置此选项,即可维持命令行的高度。

winminwidth,winminheight:用于确定调整窗口时的最小宽度和高度。vim把这两个选项值视为硬性规定,所以窗口尺寸永远不允许小于这两个值。

缓冲区及其与窗口的交互:

vim使用缓冲区作为工作对象的容器。在vim中有很多控制缓冲区以及在缓冲区中移动的命令。但是首先需要学习缓冲区的基础知识。

使用vim编辑器划分三个窗口,并在三个窗口中分别打开三个不同的文件:buffer_one.file,buffer_two.file,buffer_three.file。使用" :ls "或" :files "或" buffers "命令列出缓冲区,如下图所示:

每个文件对应一个缓冲区。每个缓冲区都有一个唯一的、不会改变的编号。如果在上述命令后面加上感叹号,还能列出每个缓冲区额外的信息。列出的缓冲区中,首先是缓冲区编号,然后是状态标志。状态标志的代码和说明如下:

u:非列出缓冲区,这个缓冲区不会列出,除非使用!。

%或#:%表示当前窗口所用的缓冲区,而#表示使用" :e # "命令跳到的缓冲区(即侯补文件对应的缓冲区)。

a或h:a表示活动中的缓冲区,即该缓冲区已经载入且可见。h表示隐藏缓冲区,隐藏缓冲区虽然存在,但不能在任何窗口中查看。

-或=:-表示缓冲区把modifiable选项关闭。=表示该文件是不能把状态修改为可调整的只读文件。

+或x:+表示缓冲区可调整,x表示缓冲区具有读入错误。

vim的特殊缓冲区:

vim自身使用的一些缓冲区称为特殊缓冲区。一般而言,这些缓冲区不能被编辑。

quickfix:包含因为我们的命令或位置列表而创建的错误列表。

help:包含vim帮助文件。使用":help"命令时,这些帮助文件将放入特殊缓冲区中。

directory:包含目录的内容,即某个目录中的文件列表。它是vim里的快捷工具,能让我们在缓冲区中移动,而且可用光标加上enter键选择欲编辑的文件。

scratch:这些缓冲区包含一般用途的文本。

隐藏缓冲区:

隐藏缓冲区是不在任何当前窗口里显示的vim缓冲区。隐藏缓冲区可使得编辑多个文件变得较为容易。使用隐藏缓冲区需要设置hidden选项。

缓冲区命令:

vim自动在打开或关闭多个文件或窗口时管理缓冲区。缓冲区命令几乎能对缓冲区执行所有操作。接下来介绍两个缓冲区命令,它们能一次对许多文件做许多工作。

:windo cmd:该命令是"window do"的简称,这个伪缓冲区命令(其实它是个窗口命令)在每个窗口中执行指定命令cmd。它只在当前分页中动作,若在执行命令时产生错误,即停在产生错误的窗口,产生的错误的窗口随即成为新的当前窗口。 cmd能够使用管道符号(|)串联多个命令,串联命令中的每一个依次在每个窗口逐一执行。

:bufdo[!] cmd:与windo命令类似,但操作对象是编辑会话中的所有缓冲区,而不仅仅是当前分页中的可见缓冲区。

接下来列出常见的缓冲区命令:

:ls[!],:files[!],:buffers[!]:列出缓冲区与文件名称,如果加上!,则包括非列表缓冲区;

:ball,:sball: 编辑所有参数或缓冲区,每个缓冲区对应一个窗口;

:unhide,:sunhide:编辑所有载入缓冲区,每个缓冲区对应一个窗口;

:badd file:把file加入列表;

:bunload[!]:从内存中卸载缓冲区。如果缓冲区修改后未保存,vim不会让缓冲区卸载。加上感叹号,将忽略vim的警告,强制卸载缓冲区;

:bdelete[!]: 卸载缓冲区并将其从缓冲区列表中删除,感叹号作用同上;

:buffer[n],:sbuffer[n]:移向缓冲区n(sbuffer会打开一个新窗口);

:bnext[n],:sbnext[n]:移向接下来的第n个缓冲区(sbnext会打开一个新窗口);

:bNext[n],:sbNext[n],:bprevious[n],:sbprevious[n]:移向前面的第n个缓冲区
(sbNext,sbprevious会打开一个新窗口);

:bfirst,:sbfirst: 移到第一个缓冲区(sbfirst会打开一个新窗口);

:blast,:sblast:移到最后一个缓冲区(sblast会打开一个新窗口);

:bmod [n],:sbmod [n]: 移到第n个修改过的缓冲区(sbmod则会打开一个新窗口);

在窗口里追踪标签:

vim把vi的标签功能扩展到窗口里,对多窗口提供标签遍历机制。使得追踪一个标签也能在新的窗口里打开相关联的文件。

使用" :stags[!] "可分割窗口,以显示找到的标签的位置。如果没有找到标签,则命令失败且不会创建新窗口。

^W^] 或 ^W] 命令:效果等价于" :stag "。

^Wg]:类似于^W],但在新窗口中,vim执行" :tselect tag "命令,其中tag是光标下的标识;

^Wg^]:类似于^Wg],但在新窗口中执行" :tjump "命令;

^Wf或^W^f:能够分割窗口并编辑光标所在处的文件名称;

^Wgf:在新的分页中打开光标所在处的文件名称。如果文件不存在,则不会创建新的分页;

分页编辑:

vim允许创建新的分页,每个分页各有独自的行为。在每个分页中,可以分割屏幕,编辑多个文件等等。可以在vim与gvim中使用分页,与分页编辑相关的命令有:

:tabnew filename :打开新分页并编辑新文件。如果未指定文件,则vim只打开一个新分页并附上空缓冲区;

:tabclose:关闭当前的分页;

:tabonly:关闭除当前分页以外的所有分页;

使用Ctrl+PgUp(向右移动一个分页)与Ctrl+PgDn(向左移动一个分页)则可在分页间左右循环移动(实际测试时,在vim中不起作用,在gvim中可行)。

关于分页编辑,书上的命令过少,这里补充几个,更详细的使用方法可以使用" :help tab-page-commands "。

:tabnext,gt:移动到下一个分页,而且为循环移动(移动到最后一个之后,继续移动将返回第一个);

:tabnext [count],[count]gt:移动到第count个分页;

:tabprevious,:tabNext,gT:移动到上一个分页,而且为循环移动;

:tabprevious [count],:tabNext [count],[count]gT: 往回移动count个分页;

:tabfirst:移动到第一个分页;

:tablast:移动到最后一个分页;

关闭与离开窗口:

vim有如下命令来关闭窗口,这些命令有很多细节需要注意,更详细的说明可以参考vim的帮助文档。

:quit,^Wq,^W^q: 离开当前窗口,如果是屏幕上的最后一个窗口,则离开vim。如果设置了hidden选项,而且该窗口是打开该文件的最后一个窗口,则缓冲区隐藏。如果没有设置hidden选项,而且该窗口是打开该文件的最后一个窗口,如果缓冲区有未保存的修改,则该命令失败(此时想要强制离开窗口,可在quit命令后面加上!,从而放弃对缓冲区的修改)。

^Wc:关闭当前窗口,如果当前窗口是屏幕上的唯一窗口,该命令执行失败。

:only,^Wo,^W^O:关闭除当前窗口以外的所有窗口。

本章vim命令总结:

^W=, ^W-, ^W+, :resize n, :resize +n, :resize -n, ^W<, ^W>, ^W|, :vertical resize, winheight选项, winwidth选项, equalalways选项,
eadirection选项, cmdheight选项, winminwidht选项,winminheight选项,
:ls, :files, :buffers, :windo cmd, :bufdo[!] cmd, :ball, :sball, :unhide, :sunhide, :badd file, :bunload[!], :bdelete[!], :buffer[n], :sbuffer[n], :bnext[n], :sbnext[n], :bNext[n], :sbNext[n], :bprevious[n], :sbprevious[n], :bfirst, :sbfirst, :blast, :sblast,
:bmod[n], :sbmod[n], :stags[!], ^W], ^W^], ^Wg], ^Wg^], ^Wf, ^W^f, ^Wgf, :tabnew, filename, :tabclose, :tabonly, ":help tab-page-commands", :tabnext, gt, :tabnext[count], [count]gt, :tabprevious, :tabNext, gT, :tabprevious[count], :tabNext[count], [count]gT,
:tabfirst, :tablast, :quit, ^Wq, ^W^q ,^Wc,:only, ^Wo, ^W^O。

时间: 2025-01-02 19:08:14

学习vi和vim编辑器(17):vim的多窗口功能(2)的相关文章

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永

在vim编辑器python实现tab补全功能

在vim编辑器中实现python tab补全插件有Pydiction,Pydiction可以实现下面python代码的自动补全: 1. 简单python关键词补全 2. python函数补全带括号 3. python模块补全 4. python模块内函数,变量补全 5. from module import sub-module补全 第一步:安装配置pydiction $ wget https://github.com/rkulla/pydiction/archive/master.zip $

Linux vi/vim编辑器

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计. 相关文章:史上最全Vim快捷键键位图 - 入门到进阶 什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方.

vim编辑器讲解

--vim编辑器讲解(vim(vi的升级版),推荐vim) 打开文件(如果该文件不存在,则创建之后,保存,从内存写到硬盘上,不保存,则删除掉该文件) vim filename vim编辑器有3中模式:命令模式,插入模式,尾行模式. 命令模式:刚进入文件的时候开始的状态.u为撤销键 命令模式进入插入模式:可以通过快捷键 i(当前光标位置插入) I(本行的开头) a(当前光标位置之后) A(当前光标所在最后) o O 插入模式返回命令模式:ESC 插入模式:主要用来编辑文本的. 尾行模式:主要用来,

vim编辑器使用方法

首先介绍下wim,Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体.1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二.但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器. Wi

关于vim编辑器的问答举例

vi与vim编辑器的区别? 答:前面多次提到vi和vim但是好多和我一样的人都会想这两个的区别在哪里?早期的Unix的大多使用的是vi编辑器,可以这样理解vim编辑器是vi的升级版,那么vim应该比vi高级很多,没错vi编辑器在编辑文件时是不会显示颜色的,而vim会显示颜色,颜色对于我们以后编程很有用的,特别是在提醒你某些地方有问题,总的来说vim和vi基本没有区别,个人建议使用vim编辑器. vim编辑器的三种模式? 答:这个问题其实怎么说呢,只是一种叫法而已,我们有些人习惯叫"一般模式.编辑

强大的vim编辑器

哈哈,小编又来了,今天呢,小编将要给大家介绍Linux上强大的vim编辑器.首先呢,先给大家介绍一下什么是vim编辑器.Vim编辑器又叫文本编辑器,在vim工作下不需要图形界面,而是通过使用键盘命令进行编辑,由于效率高,所以是许多程序员最爱的编辑器. Vim三种主要模式: 命令模式:默认模式,控制屏幕光标的移动,字符,字或行的删除,剪切复制文本等. 插入模式:只有在插入模式下,才能进行文字输入,按[ESC]键可以回到命令行模式. 扩展命令模式:将文件保存或退出,也可以设置编辑环境,如设置行号,括

vim编辑器的高级使用

vim 编辑器 1 vim 模式 编辑模式(命令行模式) 末行模式 输入模式 2 模式转换 命令行------>输入 i:在当前光标所在字符的前面,转为输入模式 a:在当前光标所在字符的后面,转为输入模式 o:在当前光标所在行的下方,新建一行,转为输入模式 I:在当前光标所在行的行首,转为输入模式 A:在当前光标所在行的行尾,转为输入模式 O:在当前光标所在行的上方,新建一行,转为输入模式 输入------>命令行 ESC键 命令行------>末行(仅能编辑模式进入末行模式) 使用:

学习vi和vim编辑器(16):vim的多窗口功能(1)

vim默认是在一个窗口中编辑所有文件,在文件间移动或者移动到文件的不同部分时只显示一个缓冲区.但vim也提供了多窗口编辑功能,可以简化复合的编辑任务.这篇文章将学习如何在一个运行的vim进程里使用多窗口,包括多窗口编辑工作的初始化与启动,在窗口间移动光标,在显示区中移动窗口等. 启动多窗口编辑: 可以在打开vim时启动多窗口编辑,也可以在编辑会话中分割窗口. 从命令行(shell)启动多窗口: 默认情况下,vim为一个会话只打开一个窗口,即使打开时已经指定多个文件.如果想从命令行中打开多个窗口,