vim >> выполнить поворот по всем буферам, открытым в целевом разделении

#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 , но для этого потребуется совсем немного внимания и предусмотрительности. Может быть, для этого есть плагин? В любом случае:

  1. Создайте свой макет:

     :vs|sp
      
  2. Вернитесь к большому окну слева:

     <C-w>w
      
  3. Поместите два файла в список локальных аргументов:

     :arglocal aaa.txt bbb.txt
      
  4. Перейдите к следующему окну, отредактируйте свой локальный список аргументов и повторите:

     <C-w>w
    :arglocal ccc.txt ddd.txt
    <C-w>w
    :arglocal eee.txt fff.txt
      
  5. Теперь вы можете сделать :next и :previous , чтобы переключить аргументы или <C-^> переключиться на альтернативный файл.

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

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

Ответ №3:

Я использую плагин vim dwm, и он очень хорошо работает для моего рабочего процесса. Я привык открывать много буферов в одном окне. С помощью этого плагина я могу легко управлять всеми из них. Я также использую плагин vim-ctrlspace, и эти два плагина прекрасно работают вместе. Ну, вот и все. Я надеюсь, что это поможет!

Комментарии:

1. согласен, vim ctrl space — это фантастика 😉