Когда мне нужно работать над разными проектами одновременно, у меня есть следующий рабочий процесс:
- Я создаю одну вкладку для каждого проекта.
- В каждой вкладке я открываю файлы, которые хочу отредактировать, что создает несколько буферов.
- Опционально, если мне нужно увидеть два (или более) файла одновременно, я создаю разделенные окна, поэтому у меня есть вкладка, содержащая разные окна, в которой показан один буфер.
Для навигации по моим буферам я на самом деле не пользуюсь, :ls
и :b [name or number of buffer]
вместо этого я создал несколько удобных отображений, позволяющих переключаться между буферами с помощью :bnext
и:bprevious
Этот способ работы довольно хорош, но меня что-то беспокоит: буферы распределяются между вкладками.
Если я открою file1
и file2
в tab1
и file3
в tab2
, если tab1
я использую несколько раз, :bnext
я увижу file3
в этой вкладке, что я не хочу. Рабочий процесс, который я хотел бы получить, выглядит следующим образом :
- Запустите vim (у меня есть первая вкладка с буфером):
$ vim foo
- Добавьте буфер на эту вкладку:
:e bar
- Откройте новую вкладку и переключитесь на нее:
:tabnew
- Откройте новый буфер в этой вкладке:
:e baz
- Если я останусь в этом буфере и сделаю
:bnext
или:bprevious
я останусь вbaz
буфере (так как он единственный в этой вкладке) - Если я перейду на предыдущую вкладку
:tabprevious
и выполню несколько раз,:bnext
я переключусь только между буферамиfoo
и между ними,bar
но не увижуbaz
Итак, вот мой вопрос: возможно ли привязать набор буферов к вкладке и заставить vim запретить доступ к некоторым буферам из другой вкладки, кроме той, в которой они должны быть?
Примечание: я знаю, что использование :b [myBuffer]
было бы способом сохранить буфер во вкладке, но когда у меня есть 3 или 4 файла для редактирования, я чувствую, что я действительно быстрее использую свои отображения, чем набираю имя буфера (даже если я могу введите только несколько символов, соответствующих имени буфера) .
alt+tab
(или, что еще хуже, мышь) чувствует себя гораздо менее простым, чем переключение вкладок в vim.Ответы:
Ммм, я не нашел там никакого плагина, но вы могли бы написать его самостоятельно. Вы должны изучить Vimscript для этого. Я только что реализовал функциональность, которая позволяет переключаться между буферами на вкладке (пока нет удаления). Вы можете скопировать это в свой vimrc:
Закройте ваш vimrc и откройте его снова. Чтобы найти следующий буфер, просто используйте
или определите свою собственную команду или отображение. Это будет работать до тех пор, пока вы не закроете или не удалите вкладку или буфер. Это также не будет работать для нескольких буферов. Чтобы добавить эти функции, потребовалось бы еще немного работы, но это определенно выполнимо.
источник
Буферы являются глобальными, и вы ничего не можете с этим поделать, кроме написания своего собственного слоя абстракции поверх вкладок, окон и буферов. Ответ philolo1 показывает разумный подход к проблеме, но вы быстро найдете пределы такого «решения», и вам потребуется дублировать множество встроенных функций, таких как
:bufdo
или альтернативный файл…«Аргументы», с другой стороны, могут быть локальными для окна, поэтому они могут быть более полезными в вашем рабочем процессе, чем «буферы» (в самом строгом значении этого слова):
Аргументы не так гибки, как буферы, но они могут обеспечить более надежную основу для вашего рабочего процесса.
Но работа над каждым проектом в отдельном экземпляре Vim, на мой взгляд, является единственным практическим решением.
источник
Поэтому, с некоторой задержкой, я думаю, что, возможно, нашел удовлетворительный (по крайней мере для меня!) Ответ. Вам понадобятся два плагина Shougo:
и карта быстрого доступа для использования вместо
:ls
просмотра (и выбора) только буферов на текущей вкладке.Например, что-то вроде:
Теперь вы можете перемещаться по текущему списку буферов вкладок (
j
,k
), выбирать один (CR
), отмену (q
), входить в режим ввода (вставки), чтобы быстро отфильтровать выбор буфера, набрав несколько букв, или даже нажать,Tab
чтобы открыть список действий. для текущего выбранного элемента (например, чтобы открыть буфер над текущим активным) - короче говоря, вы действуете общим способом «Объединить».(см. также
:h unite_default_key_mappings
и Помощь Unite в целом).А теперь финальный (пока необязательный) трюк. С помощью altercmd вы можете создать свою собственную, активированную по вкладкам
ls
команду (на основе вышеуказанной функциональности Unite):... и каждый раз, когда вы нажимаете
:ls
, Vim фактически запускает вашу команду вместо этого.Обратите внимание, что вам также не понадобится
:bn
или:bp
, поскольку просмотр и выбор буферов вкладки теперь являются одной и той же командой.источник
Я не могу комментировать, потому что мой аккаунт новый, так что извините, но ++++ 1 для ctrl-space.
Я был продан к тому времени, когда я сделал это на полпути через помощь. Ctrlspace имеет такую структуру:
Таким образом, вы можете сохранить рабочее пространство для каждого проекта, над которым вы работаете, и сразу же загрузить его, когда захотите. Это означает, что каждый раз, когда вы закрываете vim, вы можете сохранить весь свой буфер и разделение табуляции.
Вы также можете назвать свои вкладки. Если этого недостаточно, вы также можете очень легко изменить рабочие каталоги и создать закладки для часто используемых каталогов.
Он прекрасно взаимодействует с nerdtree, если вы его используете (хотя, честно говоря, вы, вероятно, даже не почувствуете, что он вам нужен через неделю после ctrlspace)
Рассмотрим этот вариант использования:
У вас есть проект. Это предполагает посадку деревьев. Есть фруктовые деревья и денежные деревья. Денежные деревья содержат доллары и центы, а фруктовые - яблоки и апельсины.
В этом примере яблоки, апельсины, доллары и центы являются «буферами».
Ctrlspace позволяет вам разделить яблоки и апельсины на одну «вкладку», которую вы можете пометить как «фрукты» - эта метка появится в строке тега в верхней части окна. Аналогичным образом, доллары и центы переходят во вкладку «деньги».
Рабочая область «деревья» сохраняет всю эту конфигурацию и позволяет вам получить к ней доступ в любой момент, когда вы открываете vim.
Теперь, когда я знаю о его существовании, я действительно не могу представить себе объектно-ориентированную разработку в vim без этого плагина. На всякий случай вот ссылка: https://github.com/szw/vim-ctrlspace
источник
Поэтому, наконец, решил создать свой собственный плагин для решения моей проблемы, он доступен на github .
Я использовал идею @ philolo1 и попытался завершить ее, в то время, когда я пишу этот ответ, она все еще находится в стадии разработки.
РЕДАКТИРОВАТЬ Я больше не поддерживаю плагин по мере развития моего рабочего процесса, и я понял, что привязка буферов к вкладке добавляет больше проблем, чем решает.
Плагин привязывает буферы к вкладкам: когда пользователь открывает буфер, он автоматически «сохраняется» на вкладке и недоступен из другой вкладки.
Установка должна быть удобной для менеджера плагинов (по крайней мере, она хорошо работает с Vim-Plug и Vundle )
Некоторые из основных функций:
:NextBuf
и:PrevBuf
заменить:bn
и:bN
сохранить согласованное состояние вкладок:ListBuf
позволяет перечислять буферы аналогично:ls
исключенным тем, что они разделены на вкладках, а знак позволяет пользователю легко увидеть, на какой вкладке он находится в данный момент.:ChangeBuf
принять номер буфера или имя буфера для смены буфера и смены вкладки автоматически:CloseBuf
:CloseTab
Для других операций пользователь должен иметь возможность использовать встроенные функции (например
:tabopen
,:tabnext
и т. Д.)Для каждой команды предусмотрены некоторые сопоставления по умолчанию, и их можно легко отключить, добавив
let g:betterTabsVim_map_keys = 0
в свой.vimrc
.Я также попытался сделать явный файл справки (
:h betterTabs.txt
): он еще не завершен, но пользователи должны найти минимум для использования плагина.У меня еще много тестов, чтобы убедиться, что плагин не нарушает нативное поведение.
Наконец, если кто-то хочет помочь, всегда можно создать проблемы на странице GitHub или создать запросы на извлечение.
источник
Проверьте этот плагин. Мне кажется, это идеально подходит для ваших нужд. https://github.com/szw/vim-ctrlspace
источник