Вопрос

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

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

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

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

Это было полезно?

Решение

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

Вкладки Vim предназначены для использования не так.На самом деле они названы неправильно.Лучшее название было бы «окно просмотра» или «макет», потому что это и есть вкладка — это другое расположение окон все существующих буферов.

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

Вместо:

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

Другие советы

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

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

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

Вим :help window очень хорошо объясняет путаницу «вкладки и буферы».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Область просмотра

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

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

Рабочие пространства

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

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

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

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

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

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

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

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

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

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

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

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

Глядя на: Вкладки помощи. Это не выглядит так, как будто Вим хочет работать так, как вы делаете ...

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

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

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

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

    map gf :tabe <cfile><CR>
    

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top