Я не понимаю буферы. Когда я открываю 3 файла на одной и той же вкладке и закрываю свое окно, я обычно раздражаюсь, когда в следующий раз открываю один из этих файлов, что там находятся странные файлы подкачки, которые задерживаются и дают мне неприятные сообщения. Но снова и снова я читал, что эти вещи - нирвана производительности, на которой я упускаю, и что вкладки были сделаны для использования плебеями.
Итак, я спрашиваю вас, эксперт Vim: каковы преимущества использования буферов перед вкладками? Я не понимаю, насколько сильно может быть разница, но я бы считал себя только на уровне начального и среднего уровня при работе с Vim. Неужели :ls
:b#
это намного быстрее, чем gt
суетиться? Я чувствую, что это должно пойти глубже, чем это.
:split
«окон». Если у вас есть все ваши буферы (файлы) на отдельных вкладках, вы не получите этот одновременный просмотр. Я бы порекомендовал изучить vim с помощью 1 вкладки и привыкнуть к расщеплению.Ответы:
Как сказал ZyX на #vim, этот вопрос звучит так: «Почему эксперты Vim предпочитают вкусное теплому?»,
«Эксперты Vim» не предпочитают буферы вкладкам: они используют буферы в качестве прокси-серверов, а вкладки - в качестве рабочих областей. Буферы и вкладки имеют разные цели, поэтому предпочтение одного другому не имеет смысла.
Проблема с буферами и вкладками связана с путаницей , вызванной сочетанием независимых фактов.
Большинство «современных» текстовых редакторов и IDE используют метафору табуляции для представления загруженных файлов. Эта метафора действует как информационная система - она показывает пользователю, какие файлы открыты и их состояние - и как интерактивное устройство - она позволяет пользователю манипулировать (переупорядочивать, выбирать, закрывать ...) этими открытыми файлами. Несмотря на их многочисленные ограничения, вкладки есть везде, и люди привыкли к ним и ожидают их везде.
Vim представил вкладки в 7.0 как способ для своих пользователей создавать специальные «рабочие пространства». Ничего в их особенностях, их определенных опциях, их определенных командах или их
:help
разделах не предполагает, что вкладки могут или должны использоваться в качестве файловых прокси.Ничего, кроме названия и появления «вкладок», конечно, что приводит к большой путанице.
Без
:set hidden
, который по умолчанию отключен и не очень легко найти, Vim делает невозможным переключение на другой буфер без записи текущего или отмены его изменений. У новых пользователей, не подозревающих об этой опции, нет другого выбора, кроме как переключиться на использование тяжелых окон или ближайшую «похожую на вкладку» функцию, которую они могут найти: вкладки.«Закладка» - неудачный выбор имени для этой функции, особенно в эпоху, когда доминирует идея, что чтение документации - пустая трата времени.
В Vim вкладки - это абстракция, построенная поверх окон, а сама абстракция построена поверх буферов. Каждый новый уровень добавляет полезные функции, но ограничивает ваш рабочий процесс.
«Буферный путь»
При работе на основе буфера файлы, с которыми вы работаете, распределяются по одному измерению. Вы можете циклически перебирать свои буферы, вы можете получить доступ к определенному буферу, набрав часть его имени (с завершением) или его номера, вы можете чередовать буферы, вы можете довольно легко на них ориентироваться. Там в основном нет трения.
Открыты восемь буферов, виден только один:
Переключение по номеру:
Переключение по имени:
Буферы - это прокси-файлы Vim. Если вы думаете с точки зрения файлов, вы думаете с точки зрения буферов.
«Оконный путь»
В оконном рабочем процессе ваши «файлы» распределены по одному и тому же «виртуальному» измерению, как если бы вы использовали только буферы и по двум другим «физическим» измерениям. Но декартовы пространства, в которых находятся эти измерения, почти полностью разделены: перемещение в другой буфер по-прежнему означает «перемещение в другой файл», а перемещение в другое окно - нет. Буфер, который соответствует желаемому файлу, может отображаться в этом окне, но он также может отображаться в другом, может быть, на другой вкладке или не отображаться вообще.
В Windows навигация между открытыми файлами либо становится слишком сложной, либо слишком простой, даже если
'switchbuf'
и:sb
. Главным образом потому, что вы вынуждены использовать два набора команд для того, что по сути одно и то же: доступ к буферу.Окна имеют свое использование, как описано ниже, но у них нет того, что нужно для замены буферов в чьем-либо рабочем процессе.
Здесь я работаю над Vim Colourscheme. Два окна - это разные виды одного и того же буфера: верхнее служит справочной, с таблицей цветовых кодов, используемых в схеме цветов, а нижнее - там, где я работаю:
Windows не спроектированы как файловые прокси и не могут быть превращены в них: они являются «контейнерами» или «областями просмотра», предназначенными для того, чтобы предложить вам просмотр в буфер. Ни больше ни меньше.
«Способ вкладки»
В рабочем процессе на основе вкладок вы, по сути, пытаетесь имитировать пользовательский опыт, к которому вы привыкли в предыдущем редакторе, при этом полностью игнорируя саму природу вкладок Vim. Если мы на мгновение забудем, что эта стратегия, как правило, очень непродуктивна, также невозможно, как и в случае с окнами, заставить Vim придерживаться этой парадигмы «один файл - одна вкладка», не теряя при этом большой гибкости.
Продолжая работать с теми же файлами, что и выше, таблица занимает значительное место практически без пользы. Все мои файлы и все мои вкладки называются,
javascript*.vim
поэтому я не могу этого сделать3gt
и быть уверенным, что окажусь в нужном месте, и невозможно получить доступ к определенной вкладке по имени. Добавьте к этому тот факт, что его метка вполне может быть очень бесполезной, но совершенно логичной[Quickfix List]
… Поскольку практического способа привязать файл / буфер к вкладке не существует, у вас остается только один практичный способ навигации между вкладками. / buffers / files: cycling.И да, моя вкладка изобилует только 8 вкладками, представьте, если бы у меня было 20!
Восемь буферов открываются на восьми вкладках (неправильно)
Две вкладки для двух конкретных задач (справа)
Страницы вкладок - это «контейнеры» или «окна просмотра», предназначенные для размещения одного или нескольких окон, сами по себе также «контейнеры», предназначенные для хранения буферов.
В заключение
«Эксперты Vim» (допустим, я могу говорить так, как если бы я был одним из них) не предпочитают буферы над вкладками: они просто используют Vim в том виде, как он был спроектирован, и им совершенно комфортно с таким дизайном:
«Эксперты Vim» загружают 2, 30 или 97 буферов и очень рады, что им не приходится иметь дело с пространственным распределением;
когда им нужно сравнить два файла или работать в одной части текущего буфера, сохраняя другой в качестве ссылки, «эксперты Vim» используют окна, потому что именно так они и должны использоваться;
когда им нужно какое-то время работать над отдельной частью проекта, не вмешиваясь в их текущее представление, «эксперты Vim» загружают новую вкладку.
источник
*.c
,*.h
,scripts/*
иtest/**/*.lua
файлы). Учитывая, что мой терминал имеет ширину всего 239 столбцов, использование «один файл на вкладку» невозможно.Я использовал , чтобы каждый буфер в отдельной вкладке, но я уставал постоянно gtи gT-ную повсюду.
Я также чувствовал, что буферами было слишком сложно управлять.
Вот некоторые приемы, которые полностью изменили мое прежнее мнение:
:b
. Вы получаете удивительно быстро в этом. Смотрите vim, быстрое переключение между файлами с помощью vanilla Vim (без плагинов)Вот мой типичный рабочий процесс:
:e
(обычно с регулярным выражением:e src/**/F*Bar.js
), чтобы открыть буфер:e
для этого также. Если я хочу переключаться между этим буфером и текущим открытым буфером, я буду использовать:sp
или,:vsp
чтобы открыть его в отдельном окне.Я почувствовал, что после недели или около того форсирования этих новых шаблонов стало намного проще визуализировать, какие буферы я открыл, и как добраться до любого из них всего за несколько автоматических движений.
источник
gT
была команда для переключения вкладок, я искал заменуctrl+tab
. Так что спасибо вам за то, что вы действительно помогаете новому пользователю, а не просто заставляете его чувствовать себя глупо.nnoremap <leader>b :ls<CR>:b<space>
он очень удобен для быстрого переключения буферов, так как показывает список открытых в данный момент буферов. Также допускаются частичные имена (при условии совпадения только одного).ctrl N
илиctrl P
(P - то, что я обычно использую), он выдаст вам список слов, чтобы закончить то, что вы печатали ... Это умно, основываясь на вашем текущем буфер, разделенные, разделенные, и все остальные открытые файлы!Недостатком вкладок является то, что вы можете видеть только содержимое по одной за раз. Таким образом, если вы используете их, как в браузере, вы теряете при просмотре нескольких буферов бок о бок или даже при просмотре отдельных частей одного и того же файла в разделениях. Поэтому многие рекомендуют использовать вкладки только для разделения различных рабочих пространств (например, одна для проекта Java, другая для списка задач, третья для взлома сценария на стороне).
Проблемы, которые вы описываете, создают впечатление, что вы используете Vim неправильно. Либо есть (в основном) один, выделенный экземпляр. Тогда буферы, которые станут скрытыми, просто «появятся» снова, если вы их отредактируете (и теперь вы можете использовать список буферов для их вызова), и сообщений об обмене файлами не будет. Или используйте отдельные экземпляры Vim для каждой сессии проекта / файла / редактирования, но затем сделайте привычкой заполнять
:quit
каждый экземпляр, когда вы закончите работу с файлом.источник
Другой совет: при использовании имени буфера в качестве аргумента для: buffer вам не нужно указывать полные имена. Однако если данному аргументу соответствует несколько буферов, они не будут переключены.
Любой фрагмент имени буфера может быть использован для сопоставления. Например, если у вас есть буферы,
request_manager.java
аqueue_manager.java
затем:buffer que
или:b que
совпадает с ними обоими, но вы переключитесь на queue_manager.java, поскольку он совпадает в начале.источник
Я использую вкладки, Ctrl- Pи сеансы Vim в своем рабочем процессе и уже более года:
Я )и (сопоставил «перейти к следующей вкладке» и «перейти к предыдущей вкладке» соответственно. tnоткрывает новую вкладку. Я также использую tabm, чтобы помочь организовать вещи.
Я использую сеансы Vim для групп файлов, относящихся к текущей истории / ошибке, над которой я работаю, обычно делаемой по категориям. Эти сессии перезаписываются в ходе процесса.
Мне еще предстоит найти что-то лучше, чем Ctrl- P, но для обработки всех файлов требуется некоторое время.
источник
Бросает 2с в кучу.
TLDR;
:b *part-of-filename*
это лучший способ найти нужный файл в списке буферов, т.е. он БЫСТРЕЕ и имеет МЕНЬШУЮ когнитивную нагрузку, чем номера буферов, вкладки или окна для отслеживания файлов.Для меня нет ничего, чтобы было открыто 30 буферов (то есть я не занимался домашним хозяйством), и прелесть используемых буферов в том, что это совсем не замедляет меня. На самом деле, это ускоряет процесс, когда через четыре дня после открытия нужного мне файла, звоните
:b *part-of-filename*
и он волшебным образом появляется, производя впечатление на коллег и постоянных коллективистов.Буферы для файлов.
Чтобы быть эффективными:
:e
ls
ВСЕ время, когда вы впервые начинаете получать хорошую мысленную модель (вы не можете обмануть то, что не видите, мысленно или буквально):q
не дует:b
в свою мышечную память:b1
подходит для первого файла, который вы открыли, иначе цифры и буквы быстро становятся неуклюжими:b#
подходит для перехода к последнему файлу, который является общей потребностью:bd#
подходит для случаев, когда вы переключились на временный файл, сделали то, что вам нужно было сделать, переключились обратно:b#
и теперь хотите закрыть этот временный файл:b *part-of-filename*
В противном случае это лучший способ найти нужный файл в списке, т.е. он БЫСТРЕЕ и имеет МЕНЬШУЮ когнитивную нагрузку, чем номера буферов, вкладки или окна для отслеживания файлов.Единственное раздражение в
:b *part-of-filename*
том, что иногда вы еще не открыли файл, и вам нужно вернуться и:e path/to/full-filename
сначала.Вкладки предназначены для выделения действительно не связанных файлов.
Или держать под рукой определенный макет окна (отказ от ответственности: я никогда не использовал его для этого сам).
Или для файлов, которые используются редко, но, как ожидается, необходимы. Для меня это обычно
commitMessage
файл, который я аннотирую во время работы, поэтому мне не нужно слишком много думать, когда приходит время делать коммит.gt
быстрее чем:b com<enter>
(если вам повезет, иначе:b com<tab><enter>
):tabe commitMessage
gt
илиgT
также любимая мышечная памятьОкна разделены для визуального сравнения информации
Или, имея непосредственный доступ к важной информации (честно говоря, если только эта информация мне не нужна для обновления в реальном времени,
:e
например, файла журнала, я обычно просто вытягиваю содержимое в текущий файл и работаю с ним там).:vsp
илиC-w v
открывает вертикальное разделение, то есть влево | правильно, затем используйте:b
или,:e
чтобы получить файл, который вы хотите:sp
илиC-w s
откройте горизонтальное разделение, т.е. сверху / снизуC-w C-w
т.е. двойной Ctrl-W, вращает вас вокруг доступных оконC-w c
закрыть текущее окноC-w o
закройте все остальные окна, сохраняйте ТОЛЬКОисточник
:b#
и:bd#
!Добавьте их в свой
.vimrc
и начните любить буферы:Таким образом, вы можете переключаться между ними в обычном режиме через Tab/ ShiftTab.
источник
<C-I>
. Карта<C-Tab>
вместо этого, если вы действительно хотите.:n
и:N
относятся к списку аргументов, а не к открытым буферам. Вы бы хотели:bn
и:bp
(:bnext
и:bprev
). Непревзойденный tpope предоставляет отображения]b
и[b
для этого (и других хороших вещей), если хотите.(
и)
, или<left>
и<right>
стрелки, возможно, будут менее полезными клавишами для переопределения, чем tab, если вы действительно хотите короткое отображение.Ctrl + Tab
поскольку это то, что используют большинство других графических редакторов и браузеров.Я хотел бы предложить блестящую реализацию, сделанную много лет назад: kien / tabman.vim . Это разъясняет следующее:
Это было замечательное открытие этого волшебного плагина, который также должен был находиться в моей конфигурации Vim в течение многих лет. В то время как я продолжал бы искать кое-что, что также отображает все скрытые буферы, TabMan - мой супермен, когда дело доходит до того, чтобы иметь представление о том, как буферы были расположены на разных вкладках.
источник
Tab и Buffers - это два разных стандарта в Vi. Прочитайте эти три определения:
Прочитайте эту статью для получения дополнительной информации https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
источник
Я загружаю «выбранные» буферы как вкладки, чтобы быстро (TAB / S-TAB) переключаться между ними. Здесь подходит структура рабочих пространств, так как для меня буферы вкладки VS - это, в основном, видимость. Я могу вставлять важные / рабочие файлы в окна и вкладки и скрывать те, которые мне не нужны, в фоновом режиме, на лету, без необходимости запоминать пути или тратить время на их поиск и загрузку снова, когда возникнет такая необходимость. Это позволяет обрабатывать несколько задач или проектов в одном сеансе VIM, я думаю, это было важно для машин с малым объемом памяти, но также хорошо для концентрации всех задач редактирования в одном фрейме приложения. У меня также есть ярлыки для переключения буфера на Ctrl-Right / Left, чтобы я мог быстро переключаться между различными буферами.
В итоге можно разделить на несколько окон только для его использования столько, сколько идет состояние экрана, но можно держать настройки нескольких окон на нескольких вкладках, расширяя тем самым рабочее пространство и улучшая рабочий процесс, позволяя удобно разделять сложные задачи, вращающиеся более чем в одном файле. ,
Для файлов подкачки вы можете указать VIM хранить их все в одной папке вашего назначения. Для этого используйте
:set directory
.источник