Почему эксперты Vim предпочитают буферы по вкладкам?

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

Поэтому я спрашиваю вас, эксперт Vim: в чем преимущества использования буферов над вкладками? Я не вижу, как разница может быть совершенно иной, но я бы рассматривал себя только на уровне начинающего-промежуточного уровня при работе с Vim. Является ли :ls :b# действительно намного быстрее, чем gt? Я чувствую, что он должен идти глубже, чем это.

Ответ 1

Как сказал ZyX на #vim, этот вопрос звучит так: "Почему эксперты Vim предпочитают вкусные более теплые?".

"Эксперты Vim" не предпочитают буферов над вкладками: они используют буферы в качестве прокси файлов файлов и страниц вкладок в качестве рабочих областей. Буферы и вкладки имеют разные цели, поэтому предпочитает одно другому, не имеет никакого смысла.

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

  • Большинство "современных" текстовых редакторов и IDE используют метафору табуляции для представления загруженных файлов. Эта метафора действует как информационная система - она ​​показывает пользователю, какие файлы открываются и их состояние - и как интерактивное устройство - позволяет пользователю манипулировать (переупорядочивать, выбирать, закрывать...) эти открытые файлы. Несмотря на их многочисленные ограничения, вкладки повсюду, и люди привыкли к ним и ожидают их повсюду.

  • Vim представил вкладки в 7.0 как способ для своих пользователей создавать специальные рабочие области. Ничто в их функциях, их конкретных опциях, их конкретных командах или их разделах :help не говорит о том, что вкладки можно использовать или использовать в качестве прокси файлов.

    Ничего, кроме названия и внешнего вида "вкладок", конечно, что приводит к большой путанице.

  • Без :set hidden, который по умолчанию отключен и не очень легко найти, Vim делает невозможным переключение на другой буфер без записи текущего или отказа от его изменений. У новых пользователей, не подозревающих об этом, нет выбора, кроме как переключиться на использование тяжелых окон или на ближайшую "табуляцию", которую они могут найти: вкладки.

"Таб-страница" является неудачным выбором названия для этой функции, особенно в эпоху, в которой доминирует идея о том, что чтение документации является пустой тратой времени.

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

"Буферный путь"

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

  • Восемь буферов открыты, только одно видимое:

    Восемь буферов открыты

  • Переключение по номеру:

    Переключение по номеру

  • Переключение по имени:

    Переключение по имени

Буферы - это прокси файлы Vim. Если вы думаете в терминах файлов, вы думаете с точки зрения буферов.

"Путь окна"

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

С окнами, перемещение между открытыми файлами становится слишком сложным или слишком упрощенным, даже с 'switchbuf' и :sb. В основном потому, что вы вынуждены использовать два набора команд для того, что по сути одно и то же: доступ к буферу.

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

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

Работа над цветами

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

"Способ вкладок"

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

По-прежнему работая с теми же файлами, что и выше, талисман занимает значительное место практически без выгоды. Все мои файлы и все мои вкладки называются javascript*.vim, поэтому я не могу сделать 3gt и быть уверенным, что я закончу в нужном месте, и невозможно достичь определенной вкладки по имени. Добавьте к этому тот факт, что его ярлык может быть очень бесполезным, но вполне логичным [Quickfix List]... Поскольку нет практического способа связать файл/буфер с закладкой, в основном вы остаетесь только одним практичным способом навигации между вкладками/буферами/файлами: циклический.

И да, моя табуляция сбита всего на 8 вкладок, представьте, если бы у меня было 20!

  • Восемь буферов открываются на восьми вкладках (неверно)

    Неверно

  • Две вкладки для двух конкретных задач (справа)

    Вправо

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

В заключение

"Эксперты Vim" (пусть предположим, что я могу говорить так, как будто я был одним) не предпочитают буферы по вкладкам: они просто используют Vim, как он был разработан, и им совершенно комфортно с этим дизайном:

  • "Специалисты Vim" загружают 2, 30 или 97 буферов и очень счастливы, что им не приходится иметь дело с пространственным распределением;

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

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

Ответ 2

Я использовал каждый буфер на отдельной вкладке, но я устал постоянно g t и g T -ing повсюду.

Я также чувствовал, что буферы слишком сложны для управления.

Вот некоторые методы, которые полностью изменили мое прежнее мнение:

Вот мой типичный рабочий процесс:

  • Откройте Vim и используйте :e (обычно с регулярным выражением :e src/**/F*Bar.js), чтобы открыть буфер
  • Поймите, мне нужно открыть другой файл. Используйте :e для этого. Если я хочу переключиться между этим буфером и текущим открытым буфером, я буду использовать :sp или :vsp чтобы открыть его в отдельном окне.
  • Повторяйте до тех пор, пока у меня не будет 3-5 файлов, которые я буду переключаться между использованием методов в вышеуказанном маркированном списке, чтобы летать между вашими буферами.
  • Если я хочу "начать с" с моими буферами, просто закройте Vim и снова откройте.

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

Ответ 3

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

Проблемы, которые вы описали, показывают, что вы используете Vim неправильно. Либо есть (в основном) отдельный выделенный экземпляр. Затем буферы, которые становятся скрытыми, будут просто "появляться", если вы их повторно отредактируете (и теперь вы можете использовать список буферов, чтобы их напомнить), и не будет файлов подкачки. Или используйте отдельные экземпляры Vim для каждого проекта/файла/сеанса редактирования, но затем сделайте привычкой полностью :quit каждый экземпляр, когда вы закончите с файлом.

Ответ 4

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

Любой фрагмент имени буфера может использоваться для сопоставления. Например, если у вас есть буферы request_manager.java и queue_manager.java тогда :buffer que или :b que соответствует обоим из них, но переключится на queue_manager.java, поскольку он совпадает в начале.

Ответ 5

Я использую вкладки, Ctrl - P и сеансы Vim в своем рабочем процессе и имею больше года:

  • У меня есть ) и (, сопоставленные "перейти к следующей вкладке" и "перейти на предыдущую вкладку" соответственно. t n открывает новую вкладку. Я также использую tabm, чтобы помочь организовать все.

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

  • Мне еще нужно найти что-либо лучше, чем Ctrl - P, но для обработки всех файлов для поиска требуется немного.

Ответ 6

Добавьте их в свой .vimrc и начните любимые буферы:

:nnoremap <Tab> :n<cr>
:nnoremap <S-Tab> :N<cr>

Таким образом, вы можете перемещаться вперед/назад через них в нормальном режиме через Tab/Shift Tab.

Ответ 7

Я загружаю "выбранные" буферы в качестве вкладок для быстрого переключения между ними (TAB/S-TAB). Рамка рабочих областей здесь подходит, так как для меня буферы VS tabs - это в основном видимость. Я могу создавать важные/рабочие файлы в окнах и вкладках и скрывать те, которые мне в настоящее время не нужно использовать в фоновом режиме "на лету", не задумываясь о путях или не трать время на поиск и загрузку их снова, как только возникнет такая необходимость. Это позволяет обрабатывать несколько задач или проектов в одном сеансе VIM, я предполагаю, что это было важно в машинах с малой памятью, но также полезно для концентрации всех задач редактирования в рамках одного кадра приложения. У меня также есть переключатели смещения буфера, установленные на Ctrl-Right/Left, поэтому я могу быстро перемещаться и через различные буферы.

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

Для файлов подкачки вы можете сообщить VIM, чтобы все они были в одной папке вашего обозначения. Для этого используйте :set directory.

Ответ 8

Я хотел бы предложить блестящую реализацию, сделанную много лет назад: kien/tabman.vim. Это разъясняет следующее:

  • Можно иметь как можно больше буферов, которые где-то тщательно спрятаны;
  • По замыслу, вкладки предназначены для креативного отображения буферов.
    • С помощью какого-то правильного плагина табуляции можно отобразить все скрытые буферы в верхнем ряду (таблин);
    • Согласно моему опыту работы с vim-Airlines, при создании новой вкладки на вкладке будет отображаться очень мало актуальной информации.
    • Два тега будут занимать слот таблицы вместе, тратя впустую оставшиеся горизонтальные пространства
    • Что еще хуже, я больше не имею представления о том, какие буферы скрыты.

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

Ответ 9

Tab и Buffers - это два разных стандарта в Vi. Прочитайте эти три определения:

A buffer is the in-memory text of a file
A window is a viewport on a buffer.
A tab page is a collection of windows.

Прочитайте эту статью для получения дополнительной информации https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/