Открытие файла заголовка в исходный файл C / C ++ с vim из нескольких каталогов и несколькими расширениями - PullRequest
4 голосов
/ 02 августа 2010

Во-первых, я собирался написать длинный список операторов if / else в vim и понял, что 1) есть лучший способ сделать то, что я пытался сделать, и 2) SO Будьте готовы с помощью по этому вопросу. Так! У меня есть множество файлов, распространяющихся примерно как

foo/src/file01.C
foo/src/file02.cc
foo/src/file03.c
foo/include/file01.hh
foo/include/file02.h
foo/include/file03.h

Если вы заметили, что расширение C / H, CC / HH, C / H может или не может соответствовать, то вы заинтересованы, и я хотел бы, чтобы вы помогли. Я смотрю на такие вещи, как следующие скрипты vim из вики Vim для «Легкого переключения между исходным файлом и файлом заголовка», и хотя я только несколько часов безуспешно записал в a.vim, это не кажется, что другие будут работать через документы на этой странице. Так может кто-нибудь помочь, как заставить это работать?

У меня было хорошее руководство: Как легко переключаться между заголовком и источником , но все равно не смог заставить его работать.

Я думаю, что я действительно хочу, это как избежать множественных операторов if и использовать реальное соответствие, чтобы делать то, что я хочу. Я хочу заглянуть в другой каталог, и если искать файл заголовка с тем же именем с любым знакомым расширением, если это был исходный файл C / C ++, или искать исходный файл любого обычного расширения, если это был файл заголовка. Спасибо за вашу помощь!

ОБНОВЛЕНИЕ: Я специально хочу открыть файл в новой вкладке. Я живу на вкладках Vim!

Ответы [ 4 ]

2 голосов
/ 31 января 2014

Я рекомендую использовать плагин FSwitch. https://github.com/derekwyatt/vim-fswitch Это делает именно то, что вам нужно из коробки. Это лучше, чем a.vim, более чем в одном смысле, переписывая идею, стоящую за a.vim.

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

Наслаждайтесь.

2 голосов
/ 06 августа 2010

Чтобы убедиться, что я использую самую последнюю версию, я загрузил последний скрипт a.vim (2.18) и скопировал его в мой каталог ~/.vim/plugin.

Вы можете определить определенные переменные в вашем ~/.vimrc файле, чтобы получить a.vim для распознавания альтернативных расширений файлов.

Чтобы файлы в вашем примере соответствовали их альтернативам, я добавил следующее к своему ~/.vimrc:

let g:alternateExtensions_C = "H,hh"
let g:alternateExtensions_hh = "C"

Это глобальные переменные, которые позволяют вам переопределить то, что уже определено. Вам придется определить оба отношения (они не работают в обоих направлениях).

Вы можете увидеть, какие текущие отображения, набрав:

:echo g:alternateExtensionsDict

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

let g:alternateExtensions_<ext> = "<list,of,alt,ext>"

Если у вас другая структура каталогов, вы можете определить, какие пути искать, переопределив переменную g:alternateSearchPath. ../src и ../include уже включены по умолчанию.

:echo g:alternateSearchPath

Чтобы открыть альтернативный файл в новой вкладке:

:AT

Кстати, скрипт a.vim довольно хорошо документирован. Возможно, вы захотите открыть его и посмотреть. Я нашел параметр или два, о которых я не знал, и я использовал его в течение многих лет; о)

Надеюсь, это поможет.

0 голосов
/ 22 марта 2011

Две полезные вещи

:he 'path'
:he tabfind

Так вы бы сделали

:set path=../,/usr/include/,/home/buildagent/SDKROOT/mysdk/inc
:tabfind error_codes.h

чтобы открыть error_codes.h откуда-нибудь экзотическое, не указывая его. Обратите внимание, что vim globbing очень гибок, поэтому вам может не понадобиться много

:argadd ./**/*.[h,H] | tab sall

откроет все заголовочные файлы в текущем каталоге, независимо от того, сколько уровней. Будьте осторожны при выполнении этой команды на большом дереве или с символическими ссылками вне дерева

0 голосов
/ 02 августа 2010

IMO ваш лучший вариант - принять существующие сценарии для использования :tabf вместо :e или того, что сценарии используют сейчас, чтобы открыть файл аналога. Вы также можете попытаться сделать изменение настраиваемым и отправить его автору сценария. (Я уверен, что многие найдут это улучшение полезным.)

Это напомнило мне об уловке, которую я использовал очень давно. Вместо того, чтобы гадать, где находятся соответствующие исходные / заголовочные файлы, я использовал в верхней части файла специальный комментарий, содержащий относительный путь к файлу аналога. Переключаться было так же просто, как найти специальный комментарий, извлечь имя файла и открыть его. Проблема была похожа на вашу в том, что расширения файлов не были предсказуемы. Мое рациональное решение состояло в том, чтобы прекратить гадать и явно указывать аналоги в исходном коде. (В эти дни я, вероятно, попытался бы поместить таблицу отношений во внешний файл со стандартным именем и найти его в VIM, используя поиск вверх .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...