Это только с помощью простого (?!) vimscript, так что вы можете поместить его в свой vimrc
, теперь он работает для .c
файлов, но может быть изменена довольно легко для .cpp
(очевидно), он даже имеет некоторые «ошибки обрабатывая "во внутренних if-утверждениях (это, вероятно, бессмысленно), но если кому-то это нужно, эй, оно есть! Без него это намного короче (просто оставьте, например, :e %<.h
), поэтому выбирайте все, что захотите.
function! HeaderToggle() " bang for overwrite when saving vimrc
let file_path = expand("%")
let file_name = expand("%<")
let extension = split(file_path, '\.')[-1] " '\.' is how you really split on dot
let err_msg = "There is no file "
if extension == "c"
let next_file = join([file_name, ".h"], "")
if filereadable(next_file)
:e %<.h
else
echo join([err_msg, next_file], "")
endif
elseif extension == "h"
let next_file = join([file_name, ".c"], "")
if filereadable(next_file)
:e %<.c
else
echo join([err_msg, next_file], "")
endif
endif
endfunction
затем добавить дополнительно к вашему vimrc
что-то вдоль этих линий:
let mapleader = "," " <Leader>
nnoremap <Leader>h :call HeaderToggle()<CR>
Теперь, когда вы находитесь в нормальном режиме, нажмите запятой ,
(это наша <Leader>
кнопка), то h
и функция из вызывается выше, и вы будете переключаться между файлами. Тада!
Я не уверен, что это случается со многими людьми. Обычно у вас есть файлы заголовков в отдельной папке, кроме исходных файлов (например, 'include /' и 'src /'), поэтому то, что вы просите, не происходит (если не искать файл в '../include/ 'или' ../ src/'). Обычно я открываю два терминала, сохраняю файл заголовка открытым в одном и исходный файл в другом, так как обычно я перехожу назад и вперед между файлами. – Shahbaz
Вы можете ввести ': e', а затем нажать ctrl-r%. Это поместит текущее имя файла в строку, затем вы можете заменить расширение. –
Связанные вопросы [Использование a.vim для C++] (http://stackoverflow.com/q/2192152) и [Vim script для переключения между заголовком и файлом реализации с помощью cscope] (http://stackoverflow.com/q/5108484). – glts