当前位置:  开发笔记 > 编程语言 > 正文

使用像缓冲区这样的Vim标签

如何解决《使用像缓冲区这样的Vim标签》经验,为你挑选了6个好方法。

我已经看过在Vim中使用制表符的能力(用:tabe,:tabnew等)作为我当前在隐藏缓冲区中在同一窗口中打开许多文件的做法的替代.

我希望我打开的每个不同文件始终位于其自己的选项卡中.但是,有些事情会妨碍这一点.我该如何解决这些问题:

    当命令喜欢gf^]跳转到另一个文件中的某个位置时,该文件将在当前选项卡的新缓冲区中打开.有没有办法让所有这些命令在新选项卡中打开文件,或者如果文件已经打开则切换到现有选项卡?

    当我可以使用切换缓冲区时 :b ,它将完成现有缓冲区中文件的名称.甚至可以是文件名的中间而不是开头.是否有相应的切换标签?

Zathrus.. 617

停止,停止,停止.

这不是Vim的标签设计使用的方式.事实上,他们的名字不好.一个更好的名称是"视口"或"布局",因为这是一个标签 - 它是所有现有缓冲区的不同窗口布局.

试图将Vim击败到1个标签== 1缓冲区是徒劳的.Vim不知道或不关心,也不会尊重它在所有的命令,尤其是,任何使用的quickfix缓冲区(:make,:grep,和:helpgrep是映入脑海的那些)将愉快地忽略选项卡并没有什么可以做,以阻止那.

代替:

:set hidden
如果您还没有此设置,请执行此操作.它使vim像地球上的其他多文件编辑器一样工作.您可以拥有在某个窗口中看不到的已编辑缓冲区.

使用:bn,:bp,:b #,:b name,和ctrl-6到缓冲区间切换.我喜欢ctrl-6自己(单独它切换到以前使用的缓冲区,或#ctrl-6切换到缓冲区编号#).

使用:ls列出的缓冲区,或者像一个插件MiniBufExpl或BufExplorer.

对我来说,这是一个错误,而不是"用户错误".在网络上搜索"vim tabs"表示几乎所有人都不同意你,或者不知道使用Vim标签的"真实"方式.另外,如果标签实际上是"布局"视图,那么为什么是默认标签标题,当前文件名?如果我想要同一个文件的多个视图,那么我的所有标题都是同一个名字(不是很有帮助吗?).因此,无论您采用哪种方式,Vim中的默认选项卡实现都存在缺陷. (190认同)

@Casey:FWIW,当我第一次知道Vim的标签并且不得不关注它们以及它们的用途时,完全想到了Zathrus给出的定义.(我是一个Vim新手顺便说一句).所以不,我不同意这是一个破碎或不直观的特征......甚至不太同意"关于每个人"都不同意(并且认为至少有一两个参考可以给予这个断言更多的权重).它具有多种同步屏幕布局,效果非常好. (46认同)

您还要在标题标题中显示什么?它显示当前缓冲区名称(不是"文件名").您可以更改选项卡标题中显示的内容. (42认同)

+1,表示"停止,停止,停止".Vim既是一种心态,也是一种工具.向新用户传授心态非常重要,因此他们可以充分发挥潜力. (32认同)

这个评论是错误的,我不确定为什么它被投票或接受.下面的Robince有正确的答案 - :tab sball和:switchbuf是你正在寻找的. (17认同)

错误在于命名.我使用它和tab-completion:nmap :ls :b (4认同)

CTRL-6太棒了.我一直在这样做:b#像笨蛋一样 (3认同)

你的描述'标签页'=='viewport'实际上增加了混乱.在`:help window`中你有:*"窗口是缓冲区上的视口."*.标签页看起来更像是多个桌面,如[@crannate的答案](http://stackoverflow.com/a/8973705/327074) (3认同)

quickfix命令的位置列表对应部分,例如`:lmake`,`:lhelpgrep`,可用于以tab-(实际上是窗口)相应的方式获得相同的功能. (2认同)

@Zathrus:搜索完一堆文件后该怎么办?进行搜索并不意味着我之后会使用匹配的文件.如果缓冲区列表被认为是文件列表,我正在使用,vim不应该用搜索结果污染它. (2认同)

@Casey"几乎所有人都不同意你的意见"当然这一切都意味着几乎每个人都错了?我在这里参加派对的时间已经很晚了,因为我才知道vim.我也错了(从其他编辑那里汲取习惯).有时候你必须承认自己错了,并且使用这个或那个工具的方式不同于如果你要充分利用它,你会天真地期望它如何工作. (2认同)


robince.. 271

这里的派对有点迟了但很惊讶我在这个列表中没有看到以下内容:

:tab sball - 这将为每个打开的缓冲区打开一个新选项卡.

:help switchbuf- 这可以控制缓冲区切换行为:set switchbuf=usetab,newtab.这应该意味着如果缓冲区打开则切换到现有选项卡,或者如果没有则创建新选项卡.



1> Zathrus..:

停止,停止,停止.

这不是Vim的标签设计使用的方式.事实上,他们的名字不好.一个更好的名称是"视口"或"布局",因为这是一个标签 - 它是所有现有缓冲区的不同窗口布局.

试图将Vim击败到1个标签== 1缓冲区是徒劳的.Vim不知道或不关心,也不会尊重它在所有的命令,尤其是,任何使用的quickfix缓冲区(:make,:grep,和:helpgrep是映入脑海的那些)将愉快地忽略选项卡并没有什么可以做,以阻止那.

代替:

:set hidden
如果您还没有此设置,请执行此操作.它使vim像地球上的其他多文件编辑器一样工作.您可以拥有在某个窗口中看不到的已编辑缓冲区.

使用:bn,:bp,:b #,:b name,和ctrl-6到缓冲区间切换.我喜欢ctrl-6自己(单独它切换到以前使用的缓冲区,或#ctrl-6切换到缓冲区编号#).

使用:ls列出的缓冲区,或者像一个插件MiniBufExpl或BufExplorer.


对我来说,这是一个错误,而不是"用户错误".在网络上搜索"vim tabs"表示几乎所有人都不同意你,或者不知道使用Vim标签的"真实"方式.另外,如果标签实际上是"布局"视图,那么为什么是默认标签标题,当前文件名?如果我想要同一个文件的多个视图,那么我的所有标题都是同一个名字(不是很有帮助吗?).因此,无论您采用哪种方式,Vim中的默认选项卡实现都存在缺陷.
@Casey:FWIW,当我第一次知道Vim的标签并且不得不关注它们以及它们的用途时,完全想到了Zathrus给出的定义.(我是一个Vim新手顺便说一句).所以不,我不同意这是一个破碎或不直观的特征......甚至不太同意"关于每个人"都不同意(并且认为至少有一两个参考可以给予这个断言更多的权重).它具有多种同步屏幕布局,效果非常好.
您还要在标题标题中显示什么?它显示当前缓冲区名称(不是"文件名").您可以更改选项卡标题中显示的内容.
+1,表示"停止,停止,停止".Vim既是一种心态,也是一种工具.向新用户传授心态非常重要,因此他们可以充分发挥潜力.
这个评论是错误的,我不确定为什么它被投票或接受.下面的Robince有正确的答案 - :tab sball和:switchbuf是你正在寻找的.
错误在于命名.我使用它和tab-completion:nmap :ls :b
CTRL-6太棒了.我一直在这样做:b#像笨蛋一样
你的描述'标签页'=='viewport'实际上增加了混乱.在`:help window`中你有:*"窗口是缓冲区上的视口."*.标签页看起来更像是多个桌面,如[@crannate的答案](http://stackoverflow.com/a/8973705/327074)
quickfix命令的位置列表对应部分,例如`:lmake`,`:lhelpgrep`,可用于以tab-(实际上是窗口)相应的方式获得相同的功能.
@Zathrus:搜索完一堆文件后该怎么办?进行搜索并不意味着我之后会使用匹配的文件.如果缓冲区列表被认为是文件列表,我正在使用,vim不应该用搜索结果污染它.
@Casey"几乎所有人都不同意你的意见"当然这一切都意味着几乎每个人都错了?我在这里参加派对的时间已经很晚了,因为我才知道vim.我也错了(从其他编辑那里汲取习惯).有时候你必须承认自己错了,并且使用这个或那个工具的方式不同于如果你要充分利用它,你会天真地期望它如何工作.

2> robince..:

这里的派对有点迟了但很惊讶我在这个列表中没有看到以下内容:

:tab sball - 这将为每个打开的缓冲区打开一个新选项卡.

:help switchbuf- 这可以控制缓冲区切换行为:set switchbuf=usetab,newtab.这应该意味着如果缓冲区打开则切换到现有选项卡,或者如果没有则创建新选项卡.


用于`switchbuf`的+ 1 - 设置switchbuf = useopen`非常好,可以避免`:make`,`:vimgrep`以及类似的命令,即使缓冲区已经显示,也会改变窗口布局中的缓冲区.
为什么不适合我?设置`:se switchbuf = usetab,newtab`后,当使用`bn`来切换缓冲区时,它仍然在当前选项卡中打开缓冲区文件而不是切换到现有选项卡?有什么不对?

3> crenate..:

Vim :help window很好地解释了"制表符与缓冲区"的混淆.

缓冲区是文件的内存中文本.
窗口是缓冲区上的视口.
标签页是一组窗口.

使用缓冲区在vim中打开多个文件.在其他编辑器(例如notepad ++)中,这是使用制表符完成的,因此vim中的名称选项卡可能会产生误导.

Windows用于拆分工作区并在一个屏幕上一起显示多个文件(缓冲区).在其他编辑器中,这可以通过打开多个GUI窗口并在桌面上重新排列它们来实现.

最后在这个类比中,vim的标签页对应于多个桌面,即不同的窗口重排.

正如vim help: tab-page解释的那样,当一个人想要临时编辑文件但又不想改变当前windows和缓冲区布局中的任何内容时,可以使用标签页.在这种情况下,可以仅使用另一个标签页来编辑该特定文件.

当然,您必须记住,在许多标签页或窗口中显示相同的文件将导致显示相同的工作副本(缓冲区).


这实际上是一个很棒的答案,但需要几个读取才有意义.buffers = tabs,windows = gui windows,tab pages = desktops到目前为止最有意义,我找到了一个不熟悉这些概念的人
我倾向于认为它们通过一个窗口进入一个房间 - "buffer"=*object*,`window` =*pane*,和`tab` =*window*.我可以在房间里移动,从不同的*windows*(`tabs`)查看.不同的*windows*可以具有不同的*窗格*的数量,排列和大小.可以在不同的*windows*中从不同的*窗格*同时查看相同的*对象*.

4> Zenexer..:

与此处的其他一些答案相反,我说您可以根据需要使用制表符.vim被设计为多功能和可定制的,而不是强迫您根据预定义的参数工作.我们都知道程序员如何喜欢将我们的"道德规范"强加给其他人,所以这个成就当然是一个主要特征.

gf是与buffers' gf命令相同的选项卡. 并将在标签之间切换.(在Byobu中,这两个命令对我来说不起作用,但它们在Byobu/tmux之外工作.替代方案是gtgT.) T将当前窗口移动到新的标签页.

如果您希望vim尽可能使用现有选项卡,而不是创建重复选项卡,请添加:set switchbuf=usetab到.vimrc文件中.您可以添加newtab到列表(:set switchbuf=usetab,newtab)以强制显示编译错误的QuickFix命令在单独的选项卡中打开.我更喜欢split,它在分割窗口中打开编译错误.

如果启用了鼠标支持:set mouse=a,则可以通过单击选项卡与选项卡进行交互.+默认情况下还有一个按钮可以创建一个新选项卡.

有关选项卡的文档,请键入:help tab-page正常模式.(执行此操作后,您可以练习使用窗口将窗口移动到选项卡T.)有很长的命令列表.某些窗口命令与选项卡有关,因此您可能也希望查看该文档:help windows.

增加:2013-12-19

要在vim中打开多个文件,并在单独的选项卡中使用每个文件,请使用vim -p file1 file2 ....如果你像我一样并且总是忘记添加-p,你可以在最后添加它,因为vim遵循正常的命令行选项解析规则.或者,你可以添加一个bash别名映射vimvim -p.


但是,对于`vim -p`,请注意默认情况下最多只能显示10个选项卡.额外文件将加载到缓冲区中,但不会显示在自己的选项卡中.
@ 0xC0000022L参见`tabpagemax`设置

5> Dominic Dos ..:

我遇到了同样的问题.我希望标签像缓冲区一样工作,我从来没有完全设法让它们.我最终解决的解决方案是使缓冲区表现得像制表符!

查看名为Mini Buffer Explorer的插件,安装和配置后,您将能够以与标签相同的方式使用缓冲区,而不会丢失任何功能.



6> icc97..:

对于那些不熟悉Vim并来自其他文本编辑器的人(在我的Sublime Text中),这是一个答案.

我仔细阅读了所有这些答案,但仍然不清楚.如果你仔细阅读它们,那么事情开始变得有意义了,但是我花了好几个小时在问题之间来回走动.

首先,正如其他人所解释的那样:

标签页,听起来很像标签,它们像标签一样,看起来很像大多数其他GUI编辑器中的标签,但它们不是.我认为这是一个基于Vim构建的糟糕的心理模型,遗憾的是它在标签页中覆盖了你的额外力量.

我理解的第一个描述来自@ crenate的答案是它们相当于多个桌面.在这方面看到你只打开了几个桌面,但每个桌面都打开了很多GUI窗口.

我会说它们与其他编辑器/浏览器类似:

    标签分组

    Sublime Text工作区(即项目中打开的文件列表)

当您看到它们时,您会发现它们的强大功能,您可以轻松地将多组文件(缓冲区)组合在一起,例如CSS文件,HTML文件和不同标签页中的JS文件.这实际上非常棒.

其他描述让我感到困惑

视口

这对我来说毫无意义.虽然它确实有一个定义的字典术语的视口,但我只听说过:help window文档中的Vim窗口.对于像Sublime Text,Visual Studio,Atom,Notepad ++这样的编辑器,Viewport并不是我所听过的术语.事实上,在我开始尝试使用标签页之前,我从未听说过Vim.

如果您查看多个桌面等标签页,那么将桌面称为单个窗口似乎很奇怪.

工作区

这可能更有意义,字典定义是:

用于临时使用的存储器存储设备.

所以它就像存放一组缓冲区的地方.

我最初听起来并不像Sublime Text的工作区概念,它是您在项目中打开的所有文件的列表:

sublime-workspace文件,包含用户特定的数据,例如打开的文件和对每个数据的修改.

然而,考虑更多,这确实同意.如果您将Vim标签页视为Sublime Text项目,那么在每个项目中只打开一个文件并在项目之间切换似乎很奇怪.因此,为什么使用标签页只打开一个文件是奇怪的.

窗户的集合

:help window指标签页这样.还有许多其他答案使用相同的概念.然而,直到你了解vim窗口是什么,那就没什么用了,就像在沙滩上建造城堡一样.

正如我上面提到的,vim窗口与视口相同,并在这篇linux.com文章中得到了很好的解释:

Vim中一个非常有用的功能是能够在一个或多个文件之间拆分可视区域,或者只是拆分窗口以更容易地查看同一文件的两个位.Vim文档可以互换地将其称为视口或窗口.

如果您曾使用过:帮助主题或按F1键使用过Vim的帮助功能,则您可能已经熟悉此功能.当您输入帮助时,Vim会分割视口并在顶部视口中打开帮助文档,使文档在底部视口中保持打开状态.

我发现奇怪的是,标签页被称为窗口集合而不是缓冲区集合.但我想你可以打开两个单独的标签页,每个标签页都有多个窗口都指向同一个缓冲区,至少这是我目前所理解的.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有