2013-12-24 2 views
1

фонКак использовать команду: tag в vim для переключения между .hpp и соответствующим .cpp?

я получил следующее жестко закодированы команда работать нормально в моем .vimrc:

nmap ,a :tag Foo.cpp<CR> 

Так что, если я ударил ,a, ВИМ будет выглядеть через кэш Ctags и откройте файл Foo.cpp из местоположения, указанного в файле тегов.

Вопрос

Как изменить эту команду, так что если я смотрю на Bar.hpp, он будет искать Bar.cpp и если я смотрю на Bar.cpp, он будет искать Bar.hpp?

AFAIK, Есть много способов кожи этого кота, но я предпочел бы использовать команду :tag как-то, так как это быстро, и я уже генерируя теги файл в любом случае.

+0

Я собираюсь оставить это право здесь: http://vim.wikia.com/wiki/Easily_switch_between_source_and_header_file –

+0

@PeterRincker ти - Я пришел через эту ссылку время googling - на самом деле, я использовал a.vim раньше, но по какой-то причине на этот раз мне не удалось правильно настроить путь поиска. Поэтому я разместил этот вопрос в поисках простого, легко понимаемого/поддерживающего решения. – kfmfe04

ответ

1

Это похоже на работу для моих простых случаях:

function! OtherName() 
     if expand('%:e') == "cpp" 
       return substitute(expand('%:t'), "cpp", "hpp", "") 
     elseif expand('%:e') == "hpp" 
       return substitute(expand('%:t'), "hpp", "cpp", "") 
     endif 
endfunction 
nmap ,a :execute "tag" OtherName()<CR> 

Там могут быть некоторые уродства, если HPP или каст фактически появляется в имени файла - возможно, мне нужно использовать регулярное выражение, чтобы подтянуть замену. Кроме того, если мы находимся в файле не cpp или hpp, все может стать уродливым.

Возможно, есть более опытные vimscripters, которые могут улучшить надежность этого кода.

1

Это модификация решения, найденного на vim wiki, Easily switch between source and header file.

nnoremap ,a :tag %:t:s,.hpp$,.X123X,:s,.cpp$,.hpp,:s,.X123X$,.cpp,<CR> 

Основная идея заключается в том, чтобы переключить .hpp для .cpp и наоборот на основе текущего файла, %.

Для получения дополнительной информации см:

:h :_% 
:h filename-modifiers 
Смежные вопросы