Я обычно работаю с 2 окнами, вертикально разделенными.
Проблема, которую я хотел бы решить, заключается в следующем: легко переходить назад и вперед из файла реализации заголовка <->
Я исследую, без удачи, 2 способа сделать это:
- Открыть альтернативный файл в текущем окне : Есть много способов сделать это, однако я не могу найти способ, который бы помнил, где я был в предыдущем файле (то есть перейти к заголовку, перейти назад, но не туда, где я был ).
- Откройте альтернативный файл в другом окне : это четко определено, так как я когда-либо работаю только с двумя окнами, однако мне не хватает знания vim для этого.
vim-windows
Zach
источник
источник
:h line()
(универсальное решение): «Эта автокоманда переходит на последнюю известную позицию в файле сразу после его открытия, если установлена метка« »: au BufReadPost * if line (») \ "")> 1 && line ("'\" ") <= line (" $ ") | exe "normal! g` \" "| endifОтветы:
Есть три основных шага в выполнении того, что вы просите:
Чтобы найти альтернативное имя файла, вы хотите разбить текущее имя файла на «корень» и «расширение». Простой способ сделать это:
Если вы знаете, что переключаетесь только между файлами
.h
и.cpp
файлами, вы можете легко изменить расширение с одного на другое:Или создайте словарь, сопоставляющий известные расширения с потенциально допустимыми альтернативными расширениями. Или используйте,
globpath()
чтобы получить все возможные альтернативы для текущего файла:и выберите первый или что-то еще. Я предпочитаю
globpath
подход, с некоторыми дополнительными умами, которые я опишу позже. Как только вы выбрали целевое расширение, сформируйте полный целевой путь:Теперь вы можете открыть альтернативный файл в текущем окне:
Или используйте,
winnr()
чтобы получить номер «другого окна» (winnr("#")
это окно, к<C-W>p
которому нужно перейти, или вы можете жестко закодировать его, если вы знаете, что оно всегда будет одинаковым для ваших настроек) и сделать что-то вроде:Это дает вам действительно простое решение для открытия альтернативных файлов. Есть несколько недостатков с вышеупомянутым подходом, так как я написал это, чтобы быть простым, и это немного не в манере. Я написал плагин, который выполняет альтернативное переключение файлов "так, как я хотел" (циклически просматривая все доступные
globpath()
результаты). Он решает некоторые проблемы с простотой вышеперечисленного, вы можете проверить его реализацию, если вы заинтересованы в изучении большего.Наконец, точка «восстановить позицию курсора». Я сохранил его напоследок, так как он ортогонален альтернативному переключению (мой плагин, к примеру, не обрабатывает его), но вы можете использовать его в своей функции, если вы собираетесь выполнить свою собственную.
:help line()
имеет автокоманду, которая полезна для восстановления позиции курсора туда, где она была, когда файл последний раз открывался:Я просто включил это, или что-то очень похожее, в мое,
.vimrc
так как я все время предпочитаю поведение. Вы можете легко разместить код в другом месте.источник
Вы можете использовать плагин vim-fswitch вместе со следующей конфигурацией в вашем
.vimrc
файле:Если тип
<Leader>
(который\
по умолчанию) , а затемs
в.hpp
или.h
файл, плагин будет проверять , если соответствующий.cpp
,.cc
или.c
файл существует:include
наsrc
в пути текущего файлаsrc
папке над текущим файломЕсть больше опций, которые вы можете использовать, чтобы лучше соответствовать вашему проекту в документации . Это займет у вас несколько минут, но как только вы все поймете правильно, вам это понравится. Лично я считаю его очень гибким и расширяемым, плюс он работает так же хорошо для многих типов файлов (.m, .h, .inl и т. Д.).
источник
В вашей
.vimrc
Это позволяет быстро перемещаться между окнами, просто используя клавиши управления Ctrl и VIM из домашней строки. Удивительно то, что у вас есть один общий способ перейти к любому окну, включая окно быстрого исправления.
Чтобы быстро переключаться между заголовком и источником, я использую
vim-scripts/a.vim
здесь: https://github.com/vim-scripts/a.vim , используйте:A
команду для переключения.Примечание:> Если вы используете tmux, вы можете использовать https://github.com/christoomey/vim-tmux-navigator для быстрого перехода между окнами vim или nvim и терминалом.
источник
Я просто поделюсь своей супер быстрой и грязной версией ...
Настройте мои отображения; alt-o открывает связанный файл в том же окне, alt-shift-o открывается в режиме разделения ...
Тогда у меня есть функция, которая получает список связанных файлов. Я намеревался настроить его, чтобы разделить имя файла по первой точке, а не по последней, но это все еще упражнение для читателя.
Моя установка .vimrc иногда специализируется для каждого клиента; некоторые имеют источник и включают в отдельные иерархии папок, некоторые имеют их вместе. По умолчанию я предполагаю, что они все рядом, но если мне понадобится охота, я предоставлю функцию замены, подобную этой.
Затем я просматриваю этот список файлов, чтобы найти файл текущего буфера и перейти к следующему в списке. Это не так просто, как пары .cpp / .h, часто у меня есть другие вещи, которые необходимо учитывать.
И, наконец, две функции, которые либо открываются в текущем окне, либо делят ...
Моя разделенная версия всегда помещает файлы .cpp и .c в разделение ниже, в противном случае разделение по умолчанию (что в моем случае выше).
источник