#vim #split #rotation #buffer #hidden
#vim #разделение #поворот #буфер #скрыто
Вопрос:
Я привык к панелям вкладок в стиле IDE и сталкиваюсь с некоторыми сценариями, вызывающими аргументы, с vim при попытке воспроизвести эту функциональность с использованием буферов и разделений.
У меня есть следующие соответствующие настройки .vimrc:
set hidden
set switchbuf=useopen,usetab
Теперь, допустим, я открываю 4 буфера, разделяю по вертикали, а затем по горизонтали, чтобы 1 буфер отображался слева, а 2 буфера отображались справа. 4-й буфер скрыт (открыт при левом разделении).
С курсором в левом разделении, используя :bnext и :bprevious, выполняется поворот по всем буферам в левом разделении; это нежелательно, так как мне действительно бесполезно видеть одно и то же содержимое файла в 2 разных разделениях (есть ли способ отказаться от влияния на клонированный буфер vim?). Использование:sbnext и:sbprevious отлично работает для видимых буферов, но как только обнаруживается скрытый буфер, он открывается в новом разделении, что приводит к хаосу в моем макете. Проблема усугубляется при работе с более чем 10 буферами.
В идеале я хотел бы выполнить поворот по всем буферам, видимым и скрытым в пределах данного разделения (т. Е. где буферы были открыты).
Предложения приветствуются.
p.s. сейчас я пробую плагин vim ctrl-space, довольно хороший, но не решает вышеуказанную проблему.
Спасибо
Ответ №1:
Зачем выполнять поворот по буферам, когда вы можете перейти непосредственно к нужному с помощью :buffer
команды?
:b foo
:b
возьмите либо номер буфера, либо частичное имя файла (с глобусами тоже!). Я рекомендую подход с частичным именем файла. Вы также можете использовать завершение табуляции, чтобы различать неоднозначные частичные имена файлов.
Вы можете использовать :sbuffer
( :sb
для краткости) тот же способ, но вместо этого открыть разделение.
Для получения дополнительной справки см.:
:h :b
:h :sb
Комментарии:
1. Конечно, это работает, вроде как. Работайте с 20 вкладками в IDE, все они видны , поэтому нет переключения контекста на серое вещество для запроса имени файла, который вам нужно отредактировать, вы просто знаете его местоположение на панели вкладок панели X или вращаете горячими клавишами открытые файлы ( где они были открыты ). Должно быть, способ vim, манипулирующий именами файлов, предпочел бы визуальный поворот по буферам, содержимое которых представляет собой файл (а не то, как он называется).
2. Я вижу, что вы указываете, но я работаю со многими открытыми буферами (иногда более 100). Использование вкладок просто не сработало бы для меня. Вместо этого я использую
:b
, ctags / cscope, projectionist , знаки заглавными буквами,:vimgrep
/:grep
/:Ggrep
/:Ack'
и<c-6>
. Я бы также поспорил, что переключение между 20 вкладками довольно неудобно. Поскольку вы ищете файлы по их содержимому, я бы предложил ctags / cscope и:vimgrep
в качестве хороших мест для начала. Однако, если вы связаны и полны решимости выполнять поворот по буферам, я предлагаю вам сопоставить:bn
и:bp
с чем-нибудь удобным3. Я уже сопоставил : bn, : bp, недостающий компонент — предсказуемость. К сожалению, разбиения создают иллюзию макетов вкладок в стиле IDE, обеспечивая при этом нечто совершенно другое. Редактирование — это сила vim, WM, конечно, нет.
4. Использование более ориентированного на буфер рабочего процесса может быть довольно сложным по сравнению с теми, которые исходят из рабочего процесса, ориентированного на окна графического интерфейса / вкладки. Vim просто отличается, и поэтому рабочие процессы будут другими. Я бы посоветовал вам попробовать рабочий процесс, ориентированный на буфер, в течение нескольких дней. Попробуйте использовать только 2 разделения и забудьте об использовании вкладок vim. Используйте
:b
, ctags,<c-o>
,<c-6>
, заглавные знаки,:ls
,:vimgrep
и, возможно, какой-нибудь нечеткий поисковик, такой как CtrlP. Забудьте об окнах и вкладках других редакторов. Сохраняйте свой макет простым, так как вы можете одновременно удерживать в голове не так много вещей. Помните, что Vim отличается
Ответ №2:
Основной навигационной единицей является буфер. Окна и страницы вкладок — это абстракции, построенные поверх буферов, которые представляют свои собственные хорошие и плохие особенности и, в большинстве случаев, плохо сочетаются с традиционными буферами.
У вас возникают проблемы, потому что вы пытаетесь применить команды буфера к рабочему процессу, ориентированному на окно.
Как только вы разделите свое рабочее пространство на несколько окон, вы обязательно будете использовать оконные команды для навигации, а навигация по вкладкам станет вашей стандартной, как только вы начнете использовать страницы вкладок. Как вы заметили, не только сложно (невозможно, AFAIK) настроить окно навигации по буферу / вкладке, но и альтернативным методам на самом деле не хватает мощности.
4-й буфер скрыт (открыт при левом разделении).
Это ваша первая проблема: этот 4-й буфер скрыт и, следовательно, является временным. Он не открывается ни в одном окне и может отображаться в любом окне. Вы можете выбрать отображение определенного буфера в определенном окне, но вы не можете «прикрепить» его к этому окну.
С курсором в левом разделении, используя :bnext и :bprevious, выполняется поворот по всем буферам в левом разделении; это нежелательно, так как мне действительно бесполезно видеть одно и то же содержимое файла в 2 разных разделениях (есть ли способ подключиться к клонированному буферу vim?). Влияет?).
Опять же, вы используете команды буфера, которые вообще не заботятся о окнах и страницах вкладок.
Использование:sbnext и:sbprevious отлично работает для видимых буферов, но как только обнаруживается скрытый буфер, он открывается в новом разделении, что приводит к хаосу в моем макете.
Опять же, неправильный инструмент для задания.
Однако можно сохранить столько списков локальных аргументов окна, сколько у вас есть Windows, и использовать эти списки с :next
и :previous
, но для этого потребуется совсем немного внимания и предусмотрительности. Может быть, для этого есть плагин? В любом случае:
-
Создайте свой макет:
:vs|sp
-
Вернитесь к большому окну слева:
<C-w>w
-
Поместите два файла в список локальных аргументов:
:arglocal aaa.txt bbb.txt
-
Перейдите к следующему окну, отредактируйте свой локальный список аргументов и повторите:
<C-w>w :arglocal ccc.txt ddd.txt <C-w>w :arglocal eee.txt fff.txt
-
Теперь вы можете сделать
:next
и:previous
, чтобы переключить аргументы или<C-^>
переключиться на альтернативный файл.
Обратите внимание, что, хотя вы смогли каким-то образом «принудительно» привязать свои буферы к определенным окнам, теперь вы серьезно ограничены в своей способности перемещаться и теперь вам приходится иметь дело с многомерной конструкцией, которая довольно хрупкая и требует слишком большого количества мозговых ячеек.
Вам следует рассмотреть возможность работы с Vim, а не против него, используя как можно больше прямых буферов.
Ответ №3:
Я использую плагин vim dwm, и он очень хорошо работает для моего рабочего процесса. Я привык открывать много буферов в одном окне. С помощью этого плагина я могу легко управлять всеми из них. Я также использую плагин vim-ctrlspace, и эти два плагина прекрасно работают вместе. Ну, вот и все. Я надеюсь, что это поможет!
Комментарии:
1. согласен, vim ctrl space — это фантастика 😉