Git Product home page Git Product logo

vim-buftabline's Introduction

Buftabline

A well-integrated, low-configuration buffer list that lives in the tabline

Buffer basics

If you don’t know anything about buffers, the minimum you have to know is that a buffer in Vim essentially means a file, and if you set hidden, Vim can keep files open without necessarily displaying them on screen. You can then use the :bnext and :bprev commands to change which buffer is being displayed in the current window, and :ls to look at the list of buffers.

If this is all news to you, you should probably add this to your configuration:

set hidden
nnoremap <C-N> :bnext<CR>
nnoremap <C-P> :bprev<CR>

For the full story, read :help windows.txt.

Why this and not Vim tabs?

Vim tabs are not very useful except in very particular circumstances. To understand why this is, you have to understand that the display in Vim has 3 layers of indirection:

  1. Buffers correspond to files.

    Not necessarily to files on disk, but in potentiality; i.e. a buffer becomes the content of a file when you do :w

  2. Windows correspond to rectangular areas on the screen, each associated with some buffer.

    Any window can be associated with any buffer, and any buffer with any window. You can change which buffer is shown in a window at any time, and you can split and resize windows to create any on-screen arrangement you want. So you could have 3 windows showing the same buffer, e.g. to work on several areas of a file at once.

    Note that while windows are always associated with a buffer - i.e. an area of the screen always shows some file –, a buffer need not be associated with any window – i.e. a file may be loaded without being shown on screen.

  3. Tabs correspond to entire screens, i.e. to an arrangement of windows.

    In other windowing environments this concept is often called a viewport, or a virtual desktop. Each window belongs to one particular tab. But note that a buffer can be shown in any window (or no window at all), so any file can appear any number of times in any number of tabs. Tabs and files do not have anything to do with each other.

Now it is possible to open just one full-screen window in each tab, and in each window edit a different buffer, in effect associating tabs with files. But this only works if you stay away from any other window or buffer management, i.e. if you never create splits and never touch the buffer list. Even then there are parts of Vim (such as the help function and the netrw Explorer) that expect to be working with windows, not tabs, and so can easily inadvertently shatter the illusion.

So if you consider what Vim tabs actually are, i.e. viewports, and you use Vim in a typical way, there are only very limited circumstances in which you will ever need such functionality, if at all.

What the typical user wants when they think of tabs is simply the ability to open multiple files and then flip between them, which in Vim means they want buffers – not tabs.

Buftabline vs. X

As of Nov 15, 2014, here is how Buftabline compares with some other plugins of which I am aware that they offer related functionality, roughly in order of their age.

  • MiniBufExpl

    Obviously no rundown can be complete without the veteran of buffer list plugins, Mini Buffer Explorer. There are two major differences:

    1. Buftabline uses the tabline while MiniBufExpl renders to a special buffer in a split. The tabline is newer than MiniBufExpl, and unlike a buffer, it is guaranteed to stick to the top of the screen within Vim, unaffected by any splits.

    2. Because Buftabline uses the tabline, it cannot offer any functionality relating to the management of buffers: all it does is show you the list.

      OTOH, this also makes Buftabline very lightweight from a user perspective: Vim has plenty of facilities for managing buffers and with Buftabline you will be using those same as without it. Buftabline need not aspire to be your sole interface to Vim’s buffers.

  • buftabs

    Buftabs is what you get when you try to implement Buftabline on a Vim that does not yet have the tabline. It can only render your tabs near or at the bottom of the Vim screen, and you have the choice between trading in your statusline for the list, or having it flicker “behind” the command line. If MiniBufExpl is too heavy for you, buftabs is the best you can do in absence of the tabline.

    I used this for a long time.

  • bufferline

    Essentially a newer rendition of buftabs.

  • Airline

    If you already use Airline, you do not need Buftabline: the functionality comes built in – see :help airline-tabline.

    If you do not already use Airline, you may not want to: it is far heavier than Buftabline, to the point of dragging down performance. C.f. Pretty statuslines vs cursor speed

  • BufLine

    This is very similar in scope and strategy to Buftabline, but not nearly as simple. The code is more than 5 times as long. There are lots of options and mappings so despite its limited scope compared to something like MiniBufExpl or Airline, it feels like a Big Plugin – one that requires a large up-front commitment. And subjective though this is, I will call its default colors ugly (while the ones in Buftabline depend entirely on your colorscheme), nor does it make any attempt to harmonise with the user colorscheme.

  • WinTabs

    This is another Big Plugin, though much, much better. It supports Vim tabs in addition to buffers, and tries to implement a functionality that is not native to Vim tabs: scoping buffers to certain tabs. This means it also needs to hook into sessions in order to support them, which it does. All in all, if you want to use Vim tabs (i.e. viewports), this is probably the best plugin for you – Buftabline will be too simplistic for your preferences.

vim-buftabline's People

Contributors

ap avatar bitbrian avatar cenkalti avatar deathlyfrantic avatar liyongjin avatar simaoneves avatar vigilancer avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.