it-roy-ru.com

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

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

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

194
2c2c

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

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

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

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

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

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

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

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

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

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

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

  1. Открыты восемь буферов, виден только один:

    Eight buffers open

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

    Switching by number

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

    Switching by name

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

"Оконный путь"

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

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

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

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

Working on a colorscheme

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

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

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

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

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

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

    Wrong

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

    Right

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

В заключение

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

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

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

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

409
romainl

Раньше я держал каждый буфер в отдельной вкладке, но мне надоело постоянно gt а также gTповсюду.

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

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

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

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

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

57
Jonathan.Brink

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

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

10
Ingo Karkat

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

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

6
Julius Martin

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

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

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

  • Я еще не нашел ничего лучше, чем Ctrl-P, но это займет немного времени, чтобы обработать все файлы для поиска.

3
ShangoThrax

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

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

Таким образом, вы можете переключаться между ними вперед/назад в нормальный режим через Tab/ShiftTab,.

0
sjas

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

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

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

0
elig

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

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

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

0
llinfeng