закрытие ожидающих открытия окон vim для открытия

#vim #perforce #vimdiff

#vim #принудительно #vimdiff

Вопрос:

Я знаю, что могу закрыть все открытые буферы в vim с помощью:qall .

Я хочу закрыть событие для ожидающих открытия буферов.
У меня возникла проблема при просмотре моих изменений в песочнице P4. Когда у меня есть изменения в нескольких файлах, и я пытаюсь просмотреть свой код с помощью «P4 diff» и установить для моего P4DIFF значение vimdiff.
Он открывает один за другим vimdiff всех измененных файлов. Теперь, если у меня есть 10 открытых файлов и после просмотра 2 файлов, я хочу закрыть diff для оставшихся 8 файлов. Как я могу это сделать?

Спасибо,

Ответ №1:

Это похоже на работу для наспех изученного Vimscript! В частности, операторы :bufdo , if , и match !

Попробуйте следующее:

 :bufdo if match(expand("%"), ".vim") >= 0 | bw | endif
  
  • bw используется buffer wipe в режиме Ex ( : оператор)
  • expand("%") возвращает имя текущего буфера
  • match(string, pattern) находит индекс pattern в string
  • | отдельные строки, если вы находитесь в режиме Ex

Это сопоставляет буферы, которые содержатся .vim в их именах файлов, и закрывает эти буферы.

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

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

  • LustyExplorer
  • FuzzyFinder
  • minibufexpl Я не могу говорить ни о каких достоинствах, но я слышал, как они несколько раз упоминались в Интернете и в IRC.

Ответ №2:

Я предполагаю, что вы открываете vim с несколькими аргументами (известными как… список аргументов).

Вероятно, вам следует сбросить его:

  :args %
  

Вы также можете выборочно управлять списком ( :argdelete ). Дополнительная информация: :he arglist

Ответ №3:

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не использовал perforce, поэтому мне пришлось сделать предположение: что, когда несколько файлов имеют незафиксированные изменения, он будет вести себя как множество виртуальных машин и запускать настроенную команду diff (в данном случае, vimdiff) для каждого измененного файла по очереди (я думаю, это то, чтовы имели в виду «открывает один за другим vimdiff всех измененных файлов»).

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

Если вы вообще хотите изменить свой рабочий процесс, вы можете что-то сделать с помощью этого vim-скрипта, который я нашел: http://www.vim.org/scripts/script.php?script_id=240

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

Если вам ничего из этого не подходит, вы всегда можете попробовать старый фаворит Ctrl-C сразу после закрытия сеанса vimdiff для файла.

Ответ №4:

Это плохой хак, но его размещение здесь, поскольку никакие другие ответы не сработали для меня.

Добавьте «qall» без qoutes поверх вашего .vimrc .

 :e ~/.vimrc
:source ~/.vimrc
:q
  

Все файлы автоматически закроются после открытия.

Затем откройте vimrc в emacs или sed и удалите qall.