Использование вкладок Vim, таких как буферы - PullRequest
348 голосов
/ 19 сентября 2008

Я рассмотрел возможность использования вкладок в Vim (с :tabe, :tabnew и т. Д.) В качестве замены моей текущей практики, когда многие файлы открываются в одном и том же окне в скрытых буферах.

Я бы хотел, чтобы каждый отдельный файл, который у меня открыт, всегда был на отдельной вкладке. Однако есть некоторые вещи, которые мешают этому. Как мне исправить это:

  1. Когда такие команды, как gf и ^], переходят в местоположение в другом файле, файл открывается в новом буфере на текущей вкладке. Есть ли способ заставить все эти виды команд открыть файл в новой вкладке или переключиться на существующую вкладку с файлом, если он уже открыт?

  2. При переключении буферов я могу использовать :b <part of filename><tab> и он завершит имена файлов в существующих буферах. <part of filename> может даже быть серединой имени файла вместо начала. Есть ли эквивалент для переключения вкладок?

Ответы [ 10 ]

597 голосов
/ 19 сентября 2008

Стоп, стоп, стоп.

Это не то, как вкладки Vim предназначены для использования. На самом деле, они ошибочно названы. Лучшим названием будет «viewport» или «layout», потому что это вкладка & mdash; это другой макет окон всех ваших существующих буферов.

Попытка превратить Vim в 1 вкладку == 1 буфер - бесполезное упражнение. Vim не знает и не заботится и не будет соблюдать его во всех командах & mdash; в частности, все, что использует буфер быстрых исправлений (:make, :grep и :helpgrep - это те, которые приходят на ум), с радостью проигнорирует вкладки, и вы ничего не можете сделать, чтобы остановить это.

Вместо:

  • :set hidden
    Если у вас еще нет этого набора, сделайте это. Это заставляет vim работать как любой другой многофайловый редактор на планете. Вы можете редактировать буферы, которые где-то не видны в окне.
  • Используйте :bn, :bp, :b #, :b name и ctrl-6 для переключения между буферами. Мне самому нравится ctrl-6 (только он переключается на ранее использовавшийся буфер или #ctrl-6 переключается на номер буфера #).
  • Используйте :ls для отображения списка буферов или такой плагин, как MiniBufExpl или BufExplorer .
268 голосов
/ 13 августа 2010

Немного опоздал на вечеринку, но удивился, что не увидел в этом списке следующего:

:tab sball - это открывает новую вкладку для каждого открытого буфера.

:help switchbuf - это управляет поведением переключения буфера, попробуйте :set switchbuf=usetab,newtab. Это должно означать переключение на существующую вкладку, если буфер открыт, или создание новой, если нет.

155 голосов
/ 23 января 2012

Vim :help window довольно хорошо объясняет путаницу "табуляция против буфера".

Буфер - это текст файла в памяти.
Окно это окно просмотра в буфере.
Закладка представляет собой набор окон.

Открытие нескольких файлов осуществляется в vim с помощью buffers . В других редакторах (например, notepad ++) это делается с помощью вкладок, поэтому имя вкладки в vim может вводить в заблуждение.

Windows предназначены для разделения рабочего пространства и отображения нескольких файлов (буферов) вместе на одном экране. В других редакторах это можно сделать, открыв несколько окон графического интерфейса и переставив их на рабочем столе.

Наконец, в этой аналогии вкладки vim будут соответствовать нескольким рабочим столам, то есть различным перестановкам окон.

Как поясняет vim help: tab-page, можно использовать вкладку, когда кто-то хочет временно отредактировать файл, но не хочет ничего менять в текущей компоновке окон и буферов. В таком случае можно использовать другую вкладку только для редактирования этого конкретного файла.

Конечно, вы должны помнить, что отображение одного и того же файла на многих вкладках или окнах приведет к отображению одной и той же рабочей копии (буфера).

50 голосов
/ 11 ноября 2012

Вопреки некоторым другим ответам здесь, я говорю, что вы можете использовать вкладки, как хотите. vim был разработан, чтобы быть универсальным и настраиваемым, а не заставлять вас работать в соответствии с предопределенными параметрами. Мы все знаем, как нам, программистам, нравится навязывать свою «этику» всем остальным, поэтому это достижение, безусловно, является главной особенностью.

<C-w>gf является эквивалентом табуляции команды gf буферов. <C-PageUp> и <C-PageDown> будут переключаться между вкладками. (В Byobu эти две команды никогда не работают для меня, но они работают вне Byobu / tmux. Возможны варианты gt и gT.) <C-w>T переместит текущее окно на новую вкладку.

Если вы предпочитаете, чтобы vim использовал существующую вкладку, если это возможно, вместо создания дублированной вкладки, добавьте :set switchbuf=usetab в ваш файл .vimrc. Вы можете добавить newtab в список (:set switchbuf=usetab,newtab), чтобы команды QuickFix, отображающие ошибки компиляции, открывались на отдельных вкладках. Я предпочитаю split вместо этого, что открывает ошибки компиляции в разделенном окне.

Если у вас включена поддержка мыши с помощью :set mouse=a, вы можете взаимодействовать с вкладками, нажимая на них. Также по умолчанию есть кнопка +, которая создаст новую вкладку.

Для документации по вкладкам введите :help tab-page в обычном режиме. (После этого вы можете попрактиковаться в перемещении окна на вкладку, используя <C-w>T.) Там есть длинный список команд. Некоторые из оконных команд связаны с вкладками, поэтому вы можете посмотреть эту документацию также с помощью :help windows.

Дополнение: 2013-12-19

Чтобы открыть несколько файлов в vim с каждым файлом на отдельной вкладке, используйте vim -p file1 file2 .... Если вы похожи на меня и всегда забываете добавить -p, вы можете добавить его в конце, так как vim следует обычным правилам синтаксического анализа параметров командной строки. Кроме того, вы можете добавить отображение псевдонима bash vim в vim -p.

15 голосов
/ 19 сентября 2008

Я столкнулся с той же проблемой. Я хотел, чтобы вкладки работали как буферы, и мне никогда не удавалось их получить. Решение, на котором я наконец остановился, состояло в том, чтобы буферы вели себя как вкладки!

Проверьте плагин Mini Buffer Explorer , после установки и настройки вы сможете работать с буферами практически так же, как вкладки, не теряя никакой функциональности.

8 голосов
/ 30 марта 2017

Это ответ для тех, кто не знаком с Vim и не работает в других текстовых редакторах (в моем случае Sublime Text).

Я прочитал все эти ответы, и это все еще не было ясно. Если вы прочитаете их достаточно, вещи начнут иметь смысл, но мне потребовались часы, чтобы переходить от одного вопроса к другому.

Первое, как объяснили другие:

Страницы вкладок , звучат очень похоже на tabs , они действуют как вкладки и во многих других редакторах GUI выглядят как вкладки, но это не так. Я думаю, что это плохая ментальная модель, созданная в Vim, которая, к сожалению, затмевает ту дополнительную мощность, которая у вас есть на вкладке.

Первое описание, которое я понял, было из ответа @ crenate , что они эквивалентны нескольким рабочим столам. С этой точки зрения у вас будет только несколько открытых рабочих столов, но в каждом из них будет открыто множество окон графического интерфейса.

Я бы сказал, что они похожи в других редакторах / браузерах:

  1. Группировка вкладок
  2. Рабочие пространства Sublime Text (то есть список открытых файлов в вашем проекте)

Когда вы видите их такими, вы понимаете всю их мощь в том, что вы можете легко группировать наборы файлов (буферов) вместе, например. ваши CSS-файлы, ваши HTML-файлы и ваши JS-файлы на разных вкладках. Что на самом деле довольно круто.

Другие описания, которые меня смущают

Viewport

Это не имеет смысла для меня. Окно просмотра, которое хотя и имеет определенный словарный термин , я слышал только о окнах Vim в документе :help window. Viewport - это не термин, который я когда-либо слышал в отношении таких редакторов, как Sublime Text, Visual Studio, Atom, Notepad ++. На самом деле, я никогда не слышал об этом для Vim, пока не начал пытаться использовать закладки.

Если вы просматриваете страницы вкладок как несколько рабочих столов, то обращение к рабочему столу как к одному окну кажется странным.

1038 * Рабочие пространства * Возможно, это имеет больше смысла, словарное определение : Память для временного использования. Так что это как место, где вы храните группу буферов. Изначально я не звучал как Концепция Sublime Text рабочего пространства, представляющего собой список всех файлов, которые вы открыли в своем проекте: файл sublime-workspace, который содержит специфичные для пользователя данные, такие как открытые файлы и модификации каждого из них. Как бы то ни было, если подумать об этом, на самом деле это согласуется. Если вы рассматриваете вкладку Vim как проект Sublime Text, то было бы странным иметь только один файл, открытый в каждом проекте, и продолжать переключаться между проектами. Следовательно, странное использование вкладки для открытия только одного файла. Коллекция окон

:help window относится к закладкам таким образом. Плюс многие другие ответы используют ту же концепцию. Однако, пока вы не разберетесь в том, что такое окно vim, это не очень полезно, как строительство замка на песке.

Как я уже упоминал выше, окно vim такое же, как окно просмотра, и тихо прекрасно описано в этой статье linux.com :

Действительно полезная функция в Vim - это возможность разделить видимую область между одним или несколькими файлами или просто разделить окно, чтобы легче просматривать два бита одного и того же файла. В документации Vim это называется окном просмотра или окном, взаимозаменяемо.

Возможно, вы уже знакомы с этой функцией, если когда-либо использовали функцию справки Vim с помощью: раздела справки или нажатия клавиши F1. Когда вы вводите справку, Vim разделяет область просмотра и открывает справочную документацию в верхней области просмотра, оставляя документ открытым в нижней области просмотра.

Мне кажется странным, что вкладка называется коллекцией окон, а не коллекцией буферов. Но я думаю, у вас может быть две открытые вкладки, каждая с несколькими окнами, указывающими на один и тот же буфер, по крайней мере, я так понимаю.

4 голосов
/ 20 сентября 2008

Я использую буферы, такие как вкладки, используя плагин BufExplorer и несколько макросов:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

С BufExplorer у вас нет панели вкладок вверху, но, с другой стороны, это экономит место на вашем экране, плюс вы можете иметь неограниченное количество открытых файлов / буферов и список буферов для поиска ...

4 голосов
/ 19 сентября 2008
  • Вы можете отобразить команды, которые обычно управляют буферами, для управления вкладками, как я сделал с gf в моем .vimrc:

    map gf :tabe <cfile><CR>
    

    Я уверен, что вы можете сделать то же самое с [^

  • Я не думаю, что vim поддерживает это для вкладок (пока). Я использую gt и gT для перехода к следующей и предыдущей вкладкам соответственно. Вы также можете использовать Ngt, где N - номер вкладки. У меня есть один недостаток: по умолчанию номер вкладки не отображается в строке вкладок. Чтобы исправить это, я поставил пару функций в конец моего файла .vimrc (я не вставлял сюда, потому что он длинный и неправильно отформатировал).

4 голосов
/ 19 сентября 2008

Глядя на : вкладки справки не похоже, что vim хочет работать так, как ты ...

Буферы распределяются между вкладками, поэтому не представляется возможным заблокировать данный буфер для отображения только на определенной вкладке.

Хотя это хорошая идея.

Скорее всего, вы можете получить желаемый эффект, используя терминал с поддержкой вкладок, например multi-gnome-terminal, а затем запустите экземпляры vim на каждой вкладке терминала. Не идеально, хотя ...

2 голосов
/ 28 июня 2013

Если вы хотите, чтобы буферы работали как вкладки, проверьте плагин tabline .

Это использует одно окно и добавляет линию сверху для имитации вкладок (просто показывает список буферов). Это вышло очень давно, когда вкладки поддерживались только в GVim, но не в командной строке vim. Поскольку он работает только с буферами, все хорошо интегрируется с остальной частью vim.

...