Использование вкладок Vim, таких как буферы

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

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

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

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

Ответ 1

Остановка, остановка, остановка.

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

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

Вместо этого:

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

В отличие от некоторых других ответов здесь, я говорю, что вы можете использовать вкладки, как хотите. 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 alias mapping vim в vim -p.

Ответ 5

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

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

Ответ 6

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

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

Во-первых, как объяснили другие:

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

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

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

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

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

Другие описания, которые я нахожу в замешательстве

Viewport

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

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

Workspaces

Это, возможно, имеет больше смысла, определение словаря :

Хранилище памяти для временного использования.

Итак, это похоже на место, где вы храните группу буферов.

Я изначально не выглядел как Концепция Sublime Text рабочего пространства, которое является списком всех файлов, которые вы открыли в своем проект:

файл sublime-workspace, содержащий данные, специфичные для пользователя, такие как открытые файлы и модификации для каждого.

Однако, думая об этом больше, это на самом деле соглашается. Если вы считаете вкладку Vim, как проект Sublime Text, то кажется странным иметь только один файл в каждом проекте и продолжать переключение между проектами. Следовательно, почему использование закладки для открытия только одного файла является нечетным.

Коллекция окон

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

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

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

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

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

Ответ 7

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

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

Это хорошая идея.

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

Ответ 8

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

    map gf :tabe <cfile><CR>
    

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

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

Ответ 9

Я использую такие буферы, как вкладки, используя плагин 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 у вас нет панели вкладок вверху, но, с другой стороны, это экономит место на вашем экране, плюс вы можете открыть бесконечное количество файлов/буферов, а список буферов доступен для поиска...

Ответ 10

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

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