vim入门--(5)窗口和标签页

作者 by adtxl / 2022-01-08 / 暂无评论 / 557 个足迹

1. 多窗口编辑

vim也有窗口的概念,有时在编辑多个文件时,可以打开多个窗口。

  • :split(缩写为sp)命令。这个命令后面如果加文件名,表示分割窗口并打开指定的文件;如果不加文件名,只是把窗口水平分割,并且当前编辑的文件在两个窗口里都编辑。
  • :vsplit(缩写为vs)命令。竖直
    分割

多窗口编辑比较适合使用鼠标,可以使用鼠标激活窗口。在开启鼠标支持的情况下,可以使用鼠标来拖动窗口分割线来调整窗口的大小。

当然,使用命令也是可以的.记住<C-W>w切换窗口就基本OK了。。。。。。

  • <C-W> 加方向键(h、j、k、l、<Left> 等等)可以在窗口之间跳转
  • <C-W>w 跳转到下一个(往右和往下)窗口,如果已经是右下角的窗口,则跳转到左上角的窗口
  • <C-W>W 跳转到上一个(往左和往上)窗口,如果已经是左上角的窗口,则跳转到右下角的窗口
  • <C-W>n 或 :new 打开一个新窗口
  • <C-W>c 或 :close 关闭当前窗口;当前窗口如果已经是最后一个则无效
  • <C-W>q 或 :quit 退出当前窗口,当最后一个窗口退出时则退出 Vim
  • <C-W>o 或 :only 只保留当前窗口,关闭其他所有窗口
  • <C-W>s 和 :split 作用相同,把当前窗口横向一分为二
  • <C-W>v 和 :vsplit 作用相同,把当前窗口纵向一分为二
  • <C-W>= 使得所有窗口大小相同(当调整过终端或图形界面 Vim 的窗口大小后特别有用)
  • <C-W>_ 设置窗口高度,命令前的数字表示高度行数,默认为纵向占满(想专心编辑某个文件时很有用)
  • <C-W>| 设置窗口宽度,命令前的数字表示宽度列数,默认为横向占满
  • <C-W>+ 增加窗口的高度,命令前的数字表示需要增加的行数,默认为 1
  • <C-W>- 减少窗口的高度,命令前的数字表示需要减少的行数,默认为 1
  • <C-W>> 增加窗口的宽度,命令前的数字表示需要增加的列数,默认为 1
  • <C-W><lt>(提醒,我们用 <lt> 表示“<”键)减少窗口的宽度,命令前的数字表示需要增加的列数,默认为 1

由于切换窗口是一个非常常见的操作,我通常会映射一下快捷键。为了跟一般的图形界面程序一致,我使用了 Ctrl-Tab 和 Ctrl-Shift-Tab:

nnoremap <C-Tab>   <C-W>w
inoremap <C-Tab>   <C-O><C-W>w
nnoremap <C-S-Tab> <C-W>W
inoremap <C-S-Tab> <C-O><C-W>W

简单解释一下:nnoremap 命令映射正常模式下的键盘,inoremap 命令映射插入模式下的键盘;正常模式的映射简单直白,应该不需要解释,插入模式的映射使用了临时模式切换键<C-O>(:help i_CTRL-O),在正常模式下执行相应的窗口命令,然后返回插入模式。使用这样的键盘映射之后,这两个快捷键在正常模式和插入模式下就都可以使用了。

2. 双窗口比较

使用vimdiff或者gvimdiff命令,后面跟两个文件名即可。

在vim内部也可以发起比较,打开第一个文件,然后使用命令:vert diffsplit 第二个文件

3. 多标签页编辑

单窗口多文件编辑最适合的场景是批量修改具有相似性质的文件,多窗口编辑最适合的场景是需要对多个文件进行对比编辑,而其他的一些同时编辑多个文件的场景,就可以考虑多标签页的编辑方式。

  • 在已有命令行模式命令前加 tab␣ 可以在新标签页中展示命令的结果,如:tab help 可以在新标签页中打开帮助,:tab split 可以在新标签页中打开当前缓冲区
  • :tabs 展示所有标签页的列表
  • :tabnew:tabedit 可以打开一个空白的新标签页,后面有文件名的话则打开该文件
  • :tabclose 可以关闭当前标签页(如果标签页里只有一个窗口,使用窗口关闭命令 <C-W>c 应该更快)
  • :tabnext、gt 或 <C-PageDown> 可以切换到下一个标签页
  • :tabNext、:tabprevious 、gT 或 <C-PageUp> 可以切换到上一个标签页
  • :tabfirst:tabrewind 切换到第一个标签页
  • :tablast 切换到最后一个标签页

如果一开始用多窗口编辑,后来发现不需要一直参照这个文件了,或者屏幕空间不足了,该怎么办呢?Vim 提供了一个命令,可以把当前窗口转变成一个新标签页:按下 <C-W>T 即可(仅当当前屏幕上有多个窗口时有效)。

4. NERDTree插件

NERDTree 就是最为著名的一个文件浏览 / 管理插件

我们使用minipac这个包管理器来管理插件

4.1 安装minipac

Linux平台使用下面的命令安装minipac

git clone https://github.com/k-takata/minpac.git \
    ~/.vim/pack/minpac/opt/minpac

然后,在vimrc配置文件中加入以下内容

if exists('g:loaded_minpac')
  " Minpac is loaded.
  call minpac#init()
  call minpac#add('k-takata/minpac', {'type': 'opt'})

  " Other plugins
endif

if has('eval')
  " Minpac commands
  command! PackUpdate packadd minpac | source $MYVIMRC | call minpac#update('', {'do': 'call minpac#status()'})
  command! PackClean  packadd minpac | source $MYVIMRC | call minpac#clean()
  command! PackStatus packadd minpac | source $MYVIMRC | call minpac#status()
endif

存盘、重启 Vim 之后,我们就有了三个新的命令,可以用来更新(安装)包、清理包和检查当前包的状态。

4.2 安装扩展包

在“Other plugins”那行下面加入以下内容:

call minpac#add('tpope/vim-eunuch')

保存文件,然后使用:PackUpate命令。略微等待后(可能需要科学上网),可以看到下面的安装完成的界面

image.png

这就说明安装成功了。我们可以按 q 来退出这个状态窗口。

我们也可以使用 :PackStatus 来重新打开这个状态窗口。要删除一个插件,在 vimrc 中删除对应的那行,保存,然后使用 :PackClean 命令就可以了。愿意的话,你现在就可以试一下。

NERDTree 缺省就会抢占 netrw 使用的路径形式,所以我们可以用 :e .来打开 NERDTree。不过,更常用的方式仍然是使用 :NERDTreeToggle,NERDTree 窗口的切换命令。我们使用这个命令可以打开上面左侧的那个 NERDTree 窗口,也可以关闭。这样,我们如果频繁需要浏览文件系统的话,就可以把这个命令映射到一个快捷键,免得每次都要打这么长的命令。

4.3 使用

在打开 NERDTree 窗口之后,使用还是相当直观的,并且按下 ? 就可以查看帮助信息,所以我也不必一一列举所有功能了。在这里,我就概要提一下最重要的几个功能点:

  • 顾名思义,这个插件以树形方式展示文件系统,在目录上敲回车或双击即可打开或关闭光标下的目录树。
  • 在文件上敲回车或双击立即打开该文件,并且光标跳转到文件窗口中,这样你就可以立即开始编辑了。
  • 在文件上使用 go 会预览该文件,也就是光标不会跳转到文件所在的窗口中,方便快速查看多个文件的内容。
  • 按 i 会打开文件到一个新的水平分割的窗口中,按 s 会打开文件到一个新的竖直分割的窗口中,按 t 会打开文件到一个新的标签页中。
  • NERDTree 会自动过滤隐藏文件和目录,但如果你需要看到它们的话,也可以用 I 来开启和关闭隐藏文件的显示。
  • 按 m 会出现一个菜单,允许添加、删除、更名等操作。

这些命令不需要死记硬背。从使用的角度,知道回车、双击就可以使用这个插件了,其他命令可以根据需要,在使用中慢慢掌握。

独特见解