난 그냥 내 슈퍼 빠른 & 더러운 버전을 공유합니다 ...
내 매핑을 설정하십시오. alt-o는 같은 창에서 관련 파일을 열고 alt-shift-o는 분할로 열립니다 ...
nnoremap <A-o> :call EditRelatedFile()<CR>
nnoremap <A-O> :call SplitRelatedFile()<CR>
그런 다음 관련 파일 목록을 가져 오는 기능이 있습니다. 필자는 파일 이름을 마지막 점이 아닌 첫 번째 점에서 자르도록 조정하려고했지만 여전히 독자에게는 연습입니다.
function! GetRelatedFileList()
" This function may be overloaded in a site-specific vimrc.
let l:thisPath = expand("%:p:r") . '.*'
let l:files = glob(l:thisPath)
return split(l:files, '[\r\n]\+')
endfunction
내 .vimrc 설정은 때때로 클라이언트마다 특화되어 있습니다. 일부에는 소스가 있고 별도의 폴더 계층 구조에 포함되며 일부는 함께 있습니다. 기본적으로 나는 그들이 모두 근처에 있다고 가정하지만 사냥해야 할 경우 이와 같은 대체 기능을 제공 할 것입니다.
" Override the basic GetRelatedFileList coming from vimrc.
function! GetRelatedFileList()
let l:thisDir = expand("%:p:h:t")
if (l:thisDir ==? "src") || (l:thisDir ==? "include")
let l:thisPath = expand("%:p:h:h")
let l:searchPaths = l:thisPath.'/include,' . l:thisPath.'/src'
let l:thisBase = expand("%:t:r") . '.*'
let l:files = globpath(l:searchPaths, l:thisBase)
else
let l:thisPath = expand("%:p:r") . '.*'
let l:files = glob(l:thisPath)
endif
return split(l:files, '[\r\n]\+')
endfunction
그런 다음 해당 파일 목록을 살펴보고 현재 버퍼의 파일을 찾고 목록의 다음 파일로 이동합니다. 그것은 종종 .cpp / .h 쌍만큼 단순하지는 않지만 종종 고려해야 할 다른 것들이 있습니다.
function! GetNextRelatedFile()
let l:fileList = GetRelatedFileList()
let l:thisFile = expand("%:p")
let l:index = index(l:fileList, l:thisFile) + 1
if l:index >= len(l:fileList)
let l:index = 0
endif
return l:fileList[l:index]
endfunction
그리고 마지막으로 현재 창에서 열리거나 분할하는 두 가지 기능 ...
function! EditRelatedFile()
let l:file = GetNextRelatedFile()
execute "edit" l:file
endfunction
내 분할 버전은 항상 .cpp 및 .c 파일을 아래 분할에 넣습니다. 그렇지 않으면 기본 분할 (내 경우에는 위)입니다.
function! SplitRelatedFile()
let l:file = GetNextRelatedFile()
let l:ext = fnamemodify(l:file, ":e")
if (l:ext ==? "cpp") || (l:ext ==? "c")
execute "below split" l:file
else
execute "split" l:file
endif
endfunction
:h line()
(일반 솔루션)의 끝을 참조하십시오 . "이 자동 명령은 '"마크가 설정된 경우 파일을 연 직후 파일에서 마지막으로 알려진 위치로 이동합니다. : au BufReadPost * if line ( "' \ "")> 1 && line ( " '\" ") <= line ("$ ") | exe "normal! g` \" "| endif