虽然一直在使用 Vim 写程序与文档,但是一直没有深究其标签页 (Tab Page) 功能的具体使用方法。现在开始重视这个问题,毕竟使用 Vim 的时间越来越少了,当然这只是针对我的所有生命而言

1 建立新的标签页

使用 Vim 在当前工作目录中新建或打开某一文件并开启新标签页显示文件内容,操作如下:

:tabnew filename

使用 tabf 指令基于正则表达式递归遍历当前工作目录查找名称匹配的文件并为其建立新标签页,用法如下:

:tabf filename_re

上述操作的前提是将 Vim 的工作目录定位到所期望的位置,否则所修改的文件可能会阴差阳错存储到你不知道的某一目录下。在终端里使用 Vim 打开某一文件时,会默认将当前目录作为 Vim 的工作目录,但是在使用 gvim 时,如果从桌面环境提供的文件管理器中直接打开某一文本文件,gvim 的工作目录默认是 $HOME。可能你与我一样,喜欢自动将 Vim 工作目录迁移到所打开文本文件的目录下,解决方法是编辑 $HOME/.vimrc 文件,添加以下代码:

"Change work dir to current dir

autocmd BufEnter * cd %:p:h

2 gvim 的 remote-tab 功能

gvim 提供了 remote-tab 的功能,可以实现在 gvim 打开文件的同时为其建立标签页。这里,“remote” 的概念是指 gvim 好像一个当前正在运行的服务器程序,在终端下使用 "gvim --remote-tab-silent filename" 这样的命令时,会将“打开文档并为其建立标签页”的指令传递于当前正在运行的 gvim 进程,gvim 进程便会乖乖地执行这一命令。该功能所能带来的好处就是只需要开一个 gvim 进程,所有待编辑的文件都以标签页的形式出现在该 gvim 进程中,这样便于隶属于某一项目的多分文件的编辑与管理。

先把你正在运行的所有 gvim 进程都关掉,然后依次执行以下的命令,就可以切身体验 remote-tab 的功用了。

$ gvim    a.txt

$ gvim    --remote-tab-silent    b.txt

$ gvim    --remote-tab-silent    c.txt    d.txt    e.txt

实际应用中,可使用 Shell 提供的别名功能,对 “gvim --remote-tab-silent” 这样的长命令行进行友好简化,做法是编辑 $HOME/.bashrc 文件,向其中添加:

alias vi='gvim --remote-tab-silent'

具体使用什么别名,要依据个人喜好。我之所以使用 "vi" 作为 "gvim --remote-tab-silent" 命令的别名,是因为我不大常用 vi 这个命令,而且在许多 linux 发行版中,"vi" 默认连接到 "vim" 的。

现在使用 vi 别名来实现前面那个例子:

$ vi    a.txt  b.txt  c.txt  d.txt  e.txt

以前我习惯使用 "vim" 在终端开启 vim,使用 "gvim" 开启 vim GUI,唯独不大用 "vi" 这个命令,但是从现在开始也许我用的最多的是 vi 指令了。

3 在标签页之间跳来跳去

使用 ":tabp" 与 ":tabn" 可分别实现在一组标签页中向前或向后切换当前标签页,但是这样太繁琐了,为了将当前标签页切换到相邻的标签页需要摁 7 次键。利用 Vim 提供的键映射功能,可将 ":tabp" 与 ":tabn" 命令映射到你喜欢的快捷键上。我热衷于将 ":tabp" 映射为 "Shift + Left" 组合键,将 ":tabn" 映射为 "Shift + Right" 组合键,做法是编辑 $HOME/.vimrc,添加:

" shift tab pages

map :tabp

map :tabn

4 标签页的排序

有时打开多个标签页,它们在标签页栏中的排列次序并不是我们所希望的,需要手动去调整。许多编辑器支持使用鼠标拖放来调整标签页的次序,但 vim 不可以,目前只能借助标签页编号机制并采用命令模式来解决标签页次序调整问题。

在标签页栏中,每一标签页都是有编号的,从 0 开始,由左至右依次递增 1。

使用 ':tabm n' 命令可以将当前标签所对应的编号调整为 'n',即将当前标签页的位置调整到编号 'n' 所对应的标签页位置。

5 优化标签页名的显示

Vim 的标签栏中,各标签页的名称默认是对应文件所在路径全称的简写,譬如 /usr/share/doc/test.txt 文件所对应的标签页名默认是 /u/s/d/test.txt,这样的标签页名看上去有些诡异。我觉得没有必要显示标签文件的路径名,因为在大多数情况下,用户是非常清楚所编辑文件的位置,即使一时忘记,也可以使用 ':f' 命令查看文件名。特别是在 gvim 里,鼠标往标签页名那里悬挂一下,就会出现一个很小的提示窗口,其中显示了标签文件的路径全称。

下面是我对 Vim 标签页的 hack,在标签页栏中去除当前所编辑文件的路径信息,只保留文件名。

function ShortTabLabel ()

let bufnrlist = tabpagebuflist (v:lnum)

let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1])

let filename = fnamemodify (label, ':t')

return filename

endfunction

set guitablabel=%{ShortTabLabel()}

6 标签页与会话

Vim 可以将当前的工作状态存储为会话文件,通过读取该会话文件就可以将 vim 工作环境恢复到你上次退出之前的编辑环境。对于当前所开启的标签页组,在下一次编辑时,可以利用 vim 的会话功能将它们一并开启,快速复原到上一次工作状态,这样就可以在 vim 中模拟出 IDE 所特有的项目管理功能。

要恢复上次的编辑环境,我们需要保存会话 (session) 信息与 viminfo 信息:

会话信息中保存了所有窗口的视图,外加全局设置;

viminfo 信息中保存了命令行历史、搜索字符串历史、输入行历史、非空的寄存器内容、文件的位置标记、最近搜索/替换的模式、缓冲区列表、全局变量等信息。

对于 vim 会话功能的使用,具体细节请参阅 easwy 的一篇文章《Vim 会话与 info》。为了更方便地使用 vim 会话功能,推荐使用 sessionman.vim插件。

linux vim(gvim) 多标签页,Vim 的标签页功能相关推荐

  1. 在Linux下使用Vi进阶编辑器Vim编译C/C++

    Vim – 编辑器之神 历史与争端 Vim 的前身是 vi,一个简洁但是略有不足的编辑器,但是从 vi 开始,编辑器的模式区分和唯快不破的思想就已经体现的很到位了.Vim 即是 vi improved ...

  2. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  3. vim gvim技巧大全

    vim&gvim技巧大全(0)  很多东东都对于深入认识vim有很大帮助:) ---------------------------------------- # 基础 ----------- ...

  4. [VIM]VIM/GVIM中代码的折叠和打开

    VIM/GVIM中代码的折叠和打开         前言:在查看代码的时候,如果代码十分冗长,尤其是c/c++系列的时候,代码结构比较让人难以理清,主要是各种注释.括号的匹配问题,虽然可以用%来查看匹 ...

  5. vim cscope java_在Vim(gvim)中使用cscope

    之前已经详细的介绍了在 vim中使用ctags ,这篇文章我们就来详细介绍一下如何在vim中使用cscope. 首先,我们还是了解一下什么是cscope.简单来讲,cscope主要用来协助浏览C/C+ ...

  6. 图解在Windows下使用vim(gvim)

    一 使用gvim 下搜索gvim,下载,安装:完成后桌面出现图标: 启动后如下: 打i键,进入插入模式,输入一段文本: 打esc,退到normal模式:打x, 删当前光标所在的一个字符: 进入插入模式 ...

  7. 【Linux基础 11】vi和vim编辑器的使用

    vi -- 终端中的编辑器 目标 vi 简介 打开和新建文件 三种工作模式 常用命令 分屏命令 常用命令速查图 01. vi 简介 1.1 学习 vi 的目的 在工作中,要对 服务器 上的文件进行 简 ...

  8. Linux命令【二】终端+Vim

    需要先安装net-tools ifconfig eth0 网卡,硬件地址为MAC 地址,网卡编号,绝对不会重复 lo 回环地址 测试两台主机之间能否通信:ping IP或域名 [-c 4//回馈四条信 ...

  9. Vim/GVim格式化xml文件

    From: http://yaven.iteye.com/blog/1084044 今天找了很久关于在VIM中格式化xml的插件都没找到,后来才发现其实不用装插件,在linux环境中使用xmllint ...

最新文章

  1. 在HTML网页中巧用URL
  2. 业界丨几张图带你看懂人工智能产业
  3. 埃森哲5G智慧城市报告:美国GDP将狂增5千亿
  4. YUMI~~强大的USB启动盘制作工具!!
  5. centos 显示50g硬盘但是 实际大小很小_天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍...
  6. 危险!!!也许你的web网站或服务正在悄无声息地被SQL注入
  7. 重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码
  8. 关于DataAccess Application block
  9. 《JS权威指南学习总结--6.1原型》
  10. C语言学习笔记(零)
  11. mysql的配置文件解释
  12. Ubuntu 20编译安装GCC 7.3.0
  13. Java IO之打印流,缓冲流,Scanner的用法
  14. STM32F4 + HAL库 + W25Q256的验证
  15. RTKLIB源码解析(三)、 Rinex文件读取(rinex.c)——2
  16. opensuse13.1(x64) ibus 添加五笔失败
  17. MapReduce模型、大数据与数据挖掘、云计算的关系
  18. BUUCTF Cipher writeup
  19. win10的开机启动文件夹
  20. 判断日期是否为周末 java_如何用Java检查给定的日期是否代表周末

热门文章

  1. curl下载失败返回0_curl返回常见错误码
  2. html一个div浮动在另一div上,css – 在另一个DIV的顶部浮动DIV
  3. python语言基础与应用章节七_专技天下Python语言基础与应用章节测试答案
  4. Python--set集合讲解; 什么是集合?创建一个集合;集合的操作函数;
  5. 5道python基础中while循环练习题
  6. Python基础教程:默认参数和可变参数
  7. Python面试题:字节到大整数的打包与解包
  8. 视频编码中的RC(rate control)是什么?码率控制 CBR (Constant Bit Rate)、VBR (Variable Bit Rate)
  9. Nginx + CGI/FastCGI + C/Cpp(编不过去,不搞了。。。)(Common Gateway Interface)
  10. linux ubuntu 切换到超级用户失败的解决办法(su 认证失败)