检查 Vim 中当前选项卡是否为空

2023-11-23

我正在编写一个 vim 插件,其中我需要检查用户正在查看的当前选项卡是否为空。如果它不为空,比如用户已经在查看缓冲区或有几个窗口,那么我想创建一个新的空选项卡并在那里使用我的插件。但如果它是空的,我想加载我的插件而不打开新选项卡。

我在文档中找不到任何合适的内容。


我唯一能想到的就是使用:windo遍历当前选项卡中的所有窗口并检查文件是否已加载。像这样的东西:

function! TabIsEmpty() abort
    " Remember which window we're in at the moment
    let initial_win_num = winnr()

    let win_count = 0
    " Add the length of the file name on to count:
    " this will be 0 if there is no file name
    windo let win_count += len(expand('%'))

    " Go back to the initial window
    exe initial_win_num . "wincmd w"
    
    " Check count
    if win_count == 0
        " Tab page is empty
        return 1
    else
        return 0
    endif
endfunction

" Test it like this:
echo TabIsEmpty()

" Use it like this:
if TabIsEmpty() == 1
    echo "The tab is empty"
else
    echo "The tab is not empty"
endif

如果唯一打开的是帮助页面或预览窗口或类似的东西,它将返回 0,因为它们有文件名。

如果您打开一个新选项卡然后拆分它,这仍然返回 1,因为所有窗口都没有文件名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 Vim 中当前选项卡是否为空 的相关文章

  • 如何让 Vim 匹配不以七位数字开头的行?

    我有一个大约 1000 行的文件 除个别行外 所有行均以七位数字开头 我需要捕捉这些行并将它们与前一行实际连接起来 我已经成功地能够使用以下正则表达式模式匹配以七位数字开头的任何行 d 7 我似乎无法让它匹配任何一行不匹配不过 这种模式确实
  • 终端 vim 中的语法高亮显示,但 gVIM 中没有

    我目前在终端中使用 VIM 并且有完美的语法突出显示 但是当我尝试使用 gvim 时 无论什么类型的文件或输入多少次 syntax on 我都没有得到任何语法突出显示 有人有什么想法吗 谢谢 这是我的 vimrc 供感兴趣的人使用 Turn
  • 如何从 Vim 中发送转义序列?

    因此 最近苹果公司支持在终端的状态栏中显示工作目录和文件 必须发送的转义序列 以设置当前文件 是这样的 ESC 6 Pt BEL where Pt is a file url 指向当前正在编辑的文件 所以我想我可以让 Vim 发送这个命令作
  • 移动相邻选项卡以进行拆分?

    有没有一种简单的方法可以将 Vim 中的相邻选项卡作为拆分移动到当前窗口 While looking around I reached a mailing list discussion where someone said it s th
  • 如何设置打开文件时默认展开?

    In my vimrc我已经把set foldmethod syntax启用方法折叠等 但是 我不喜欢每次打开文件时都会折叠整个文件的默认设置 有没有办法启用foldmethod 但是当我打开文件时文件是否展开了 set foldlevel
  • 在 vim 中执行 python 命令并获取输出

    当 Vim 编译时支持 Python 时 您可以使用 Python 编写 Vim 脚本 python命令 我将如何使用它来执行命令并将结果插入光标下 例如 如果我要执行 python import os os listdir aDirect
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • 我可以在 VIM 或 Perl 中替换单个正则表达式中的多个项目吗?

    假设我有字符串 The Quick Brown Fox Jumps Over the Lazy Dog 我可以用一个正则表达式将其更改为 The Slow Brown Fox Jumps Over the Energy Dog 吗 目前 我
  • VIM:可用的快捷方式?

    我在 vim 中使用了许多快捷方式 其他快捷方式由插件使用 有时我想为新命令添加快捷方式 但事后请注意该快捷方式已被使用 有没有办法查看 VIM 中所有可用快捷键的列表 所有 ctrl shift alt 快捷键 Type help ind
  • gvim中的鼠标输入

    标准鼠标输入可以在 vim 中自定义吗 在我的例子中是 vim 插件也是可以接受的选择 我特别感兴趣的是 覆盖 双击某个单词 这样 gvim 就不仅仅是突出显示该单词 而是进行搜索 从而突出显示文件中该单词的所有实例 我在其他编辑器中看到过
  • 如何在 vim 中为 cscope 输出添加颜色?

    我使用的是 vim 7 4 vim 中的 cscope 输出全是白色 可以变得更加丰富多彩吗 我尝试了cecscope 它使用quickfix给vim带来颜色 但它的输出不适合小屏幕 使用笔记本电脑时它没有那么有用 那么还有其他方法可以为
  • 为什么在 Vim 的插入模式下粘贴长一行非常慢?

    昨天 当我尝试将 1200 行 每行 80 个字符 粘贴到 Vim 时 我的 Macbook 被卡住了 下载文件而不是粘贴文本要快得多 我认为这个问题可能是互联网运营商允许上传速度比下载速度慢的原因 如果您将其粘贴到终端窗口中 Vim 会认
  • 强制 vim 覆盖外部更改

    我使用 Vim 7 4 Mac OS 编辑和运行 Lua 脚本 我已经在 vimrc 中映射了一个键来保存当前缓冲区并运行外部脚本 vimrc 中的按键映射 map V w
  • 如何使用 VIM 进行 .Net 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Vim 中仅在某些上下文中启用语法隐藏?

    我想隐藏名称基于希腊符号的变量 并将它们转换为 Unicode 等效符号 类似于vim 可爱的 python https github com ehamberg vim cute python作品 例如 我有这个 syntax match
  • 按文件类型设置 Vim 空白首选项

    在我的工作中 我需要遵循房屋风格进行缩进 如下所示 编码 html 和 ruby 时有 2 个空格 编码 javascript 时使用制表符 建议使用 tabwidth 4 为每个文件类型指定不同的空白首选项的最佳方法是什么 方法有很多 但
  • Vim:无法让病原体加载包

    我在 Stackoverflow 和 github 等上阅读了有关此问题的其他五个问题 但一直无法解决这个问题 此时我完全迷失了 我使用的是 Ubuntu 11 10 和 Vim 7 3 这是我的 vimrc set nocp call p
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • vim 中的 python 2 支持

    我正在尝试设置 YouCompleteMe 一个 vim 代码完成插件 当我运行 vim 时 它给我这个错误消息 YouCompleteMe unavailable 需要 python 2 x 我的 ubuntu 机器上安装了正确版本的 p
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例

随机推荐

  • 按下 JFrame 中的按钮后打开 JPanel [重复]

    这个问题在这里已经有答案了 我知道有人问过这个问题 但我未能找到解决方案 我创建了一个JFrame对于登录 我想在按下 Cont Nou 按钮后为新帐户打开一个带有 jpanel 的新窗口 但不知道如何使初始框架消失并显示带有 jpanel
  • 需要在 ExtendScript 中对对象进行 JSON 字符串化

    我正在使用 ExtendScript 处理 Indesign 文档链接的元数据信息 我想使用将对象转换为字符串JSON stringify但是当我使用它时 我收到错误消息 can t execute script in target eng
  • 为什么“if constexpr”的错误分支会被编译?

    为什么这段代码在编译时会出错 我的知识 还有this of if constexpr 说else块不应该被编译 if constexpr true int a 10 else int b 10 错误是 error expected or b
  • .Net Core 上的 OData 未在 $select 上返回正确的结果

    我已将 OData 添加到我的 WebAPI 项目中 版本 核心3 1 OData 7 3 0 测试版 以便与 Core 3 x 配合使用 EF 核心 3 1 0 这是我的startup cs public class Startup pu
  • Django:IE 无法加载本地主机或加载速度非常慢

    我刚刚开始学习 Django 在我的计算机上构建一个项目 运行 Windows 7 64 位 Python 2 7 Django 1 3 基本上 无论我写什么 它都会立即加载到 Chrome 和 Firefox 中 但对于 IE 版本 9
  • 读取 Cobol 生成的文件

    我目前正在编写一个 C 应用程序 该应用程序位于两个现有应用程序之间 我对第二个应用程序的了解是它处理第一个应用程序生成的文件 第一个应用程序是用 Cobol 编写的 脚步 1 Cobol 应用程序 写入一些文件并复制到目录中 2 第二个应
  • 在 vim 中将 ex 命令重定向到 STDOUT

    我正在尝试编写一个命令将 vim 的突出显示信息转储到 STDOUT 我可以成功写入这样的文件 vim redir gt outfile hi redir END q 在这之后 outfile包含正是我想要的 但我宁愿输出到 STDOUT
  • 使用 wget 和 SFTP 获取文件 [关闭]

    Closed 这个问题是无关 目前不接受答案 大家好 我每天晚上在 Linux 服务器上运行一个脚本 该脚本打算使用 wget 和 ftp 协议从另一个服务器获取文件 这些文件位于无法通过 HTTP 访问的文件夹下 这是使用的命令行 wge
  • std::list<>::sort 稳定吗?

    我找不到这个问题的任何明确答案 我想大多数实现都使用稳定的合并排序 但是稳定性是要求还是副作用 C 标准 ISO IEC 14882 2003 说 23 2 2 4 31 Notes 稳定 保留等效元素的相对顺序 如果抛出异常 列表中元素的
  • 在 if 语句中,cin 如何计算为 true?

    我以为 if true execute this statement 那么如何if std cin gt gt X 当没有什么 真实 的时候 执行为 true 吗 我可以理解如果是的话if x lt y or if y operator x
  • 在 ASP.NET Core 中显示 SelectList 中的数据

    我尝试了几种不同的方法 我不知道为什么 但我的 SelectList DropDown 是空的 它显示没有数据 我不确定我哪里出错了 我有一个 ASP NET Core 应用程序 实体框架核心 数据库第一 我正在使用存储库模式 这是我的模型
  • Linq、OrderByDescending、First 和邪恶的 DefaultIfEmpty

    希望这是我不理解基本知识的一个简单问题 下面是我正在开发的应用程序中的两个 Linq 语句 EDMXModel Classes Period p1 entities Periods DefaultIfEmpty null OrderByDe
  • 覆盖 Rails 3 中的默认脚手架生成器

    我已经为 Rails 3 中的控制器创建了一个生成器 现在我想在使用脚手架生成器时使用这个生成器作为默认生成器 那可能吗 您的自定义控制器文件的正确位置是lib templates rails scaffold controller con
  • 如何将 ISO 8601 日期时间字符串转换为 Python 日期时间对象? [复制]

    这个问题在这里已经有答案了 我得到一个格式类似于 2009 05 28T16 15 00 的日期时间字符串 我相信这是 ISO 8601 一种黑客选项似乎是使用解析字符串time strptime并将元组的前六个元素传递到日期时间构造函数中
  • 如何在多个 CruiseControl.NET 版本之间共享标签值?

    我在 CruiseControl NET 中设置了两个项目 CI 构建和夜间构建 它们都执行相同的 NAnt 脚本 但参数不同 CruiseControl NET 标签 当前由默认标签器 作为版本的构建部分嵌入到 AssemblyInfo
  • 元素的流体网格居中,无需在父级上设置硬宽度

    我想将元素的 网格 居中 当调整大小时 该元素会调整到自身居中 像这样
  • AngularJS 修剪模型中的前导零,而视图/输入值仍然保持不变?

    对于类型为数字的输入元素 当输入的数字具有前导零 例如 0000123456 时 模型将更新为 123456 而视图 输入仍保持相同的 0000123456 但是 如果我从数字切换到文本 一切都会按预期进行 我想要一个数字 因为它会显示移动
  • wix - 如何删除非空文件夹

    我已阅读该网站上存在此类问题的所有主题 但找不到我需要的内容 我有一个程序的两个版本 旧版本和新版本 在旧版本中我有文件夹 f1 在新版本中我没有这个文件夹f1 当新程序的安装程序检测到旧版本时 它会删除该旧版本 但不会删除文件夹 f1 如
  • map() 返回 LIST 时出现语法错误

    这有效 print map x gt 1 5 print map x gt 1 5 print map x gt 1 5 但这会引发语法错误 print map x gt 1 5 这是已记录的错误 未记录的错误 还是我不明白为什么它不应该编
  • 检查 Vim 中当前选项卡是否为空

    我正在编写一个 vim 插件 其中我需要检查用户正在查看的当前选项卡是否为空 如果它不为空 比如用户已经在查看缓冲区或有几个窗口 那么我想创建一个新的空选项卡并在那里使用我的插件 但如果它是空的 我想加载我的插件而不打开新选项卡 我在文档中