Открыть другой файл в vim на основе имени текущего файла

Открыть другой файл в vim на основе имени текущего файла

При работе с Go я хотел бы иметь возможность открывать соответствующий тестовый файл для каждого файла .go, с которым я работаю, и наоборот. Формат, которому он соответствует, соответствует foo.go. foo_test.goЯ могу предположить, что если он существует, то он всегда будет находиться в одной и той же папке. Мне все равно, откроется ли он в буфере, вкладке или даже в текущем буфере, я просто хочу нажать кнопку и иметь возможность переключаться между ними. Как это сделать?

решение1

Есть некоторые плагины, которые могут переключаться между C/C++ .cи .hфайлами; некоторые могут быть настолько настраиваемыми, чтобы соответствовать вашему варианту использования. Однако такое сопоставление (или команда) может быть легко определено, например, для <Leader>a:

:nnoremap <expr> <Leader>a ':edit ' . (expand('%:t:r') =~? '_test$' ? expand('%:s?_test??') : expand('%:r') . '_test.' . expand('%:e')) . '<CR>'

Используется :help filename-modifiersдля извлечения, сравнения и сборки :editкоманды.

Вышеприведенное предназначено для глобального использования в ~/.vimrc; если вам это нужно только для файлов Go, используйте :nnoremap <buffer> <expr> ... Then либо prepend :autocmd Filetype goи поместите это в ваш ~/.vimrc, либо, поскольку это становится громоздким при добавлении сопоставлений и других настроек для различных типов файлов, поместите команды в ~/.vim/ftplugin/go_mappings.vim. (Для этого требуется, чтобы у вас был :filetype plugin on.)

решение2

Для быстрого решения проблемы рассмотрите возможность использования моей версии файлов среды выполнения Go:https://github.com/AndrewRadev/vim-golang.

Он определяет :Aсемейство команд (соответствующие определения см.здесь, изменение имени файлаздесь).

По сути, это ответ Инго Карката, оформленный в виде плагина, так что чтение :help filename-modifiersи следование его советам — определенно хороший способ.

решение3

Я могу порекомендовать плагинvim-дергатьсядля решения этой проблемы.

Связанный контент