我写了一个函数,它为我打开了一个相应的文件。
我的编码项目中有一个约定,我将测试文件保存在与原版相同的子文件夹结构中 - 待测试 - 一个。
例如:
project_dir/
|-->src/
| |-->test.js
|-->test/
|-->test_spec.js
所以,如果我正在编辑test/test_spec.js
并致电OpenCorrespondingFile()
,那么应该打开src / test.js,反之亦然。
现在我写了以下功能:
function! OpenCorrespondingFile()
let l:filename=expand('%:t')
let l:path=expand('%:p')
if l:path =~ "/src/"
let l:correspondingFilePath = substitute(l:path, "src/", "test/", "")
let l:correspondingFilePath = substitute(l:correspondingFilePath, ".js", "_spec.js", "")
elseif l:path =~ "/test/"
let l:correspondingFilePath = substitute(l:path, "test/", "src/", "")
let l:correspondingFilePath = substitute(l:correspondingFilePath, "_spec", "", "")
endif
execute "only"
execute "split"
execute "edit " . l:correspondingFilePath
execute "wincmd j"
execute "edit " . l:path
endfunction
:nnoremap <leader>oc :call OpenCorrespondingFile()<cr>
问题是,如果我的路径中有test /或src /多次,则路径的错误部分将被替换。
所以我需要知道,我如何能够替换模式的最后一次出现。
let l:correspondingFilePath = SUBSTITUTE_LAST_OCCURRENCE(l:path, "src/", "test/", "")
提前thx!
function! OpenCorrespondingFile()
let filename=expand('%:t')
let path=expand('%:p')
if path =~ '/src/'
let correspondingFilePath = substitute(path, '.*\zssrc/', 'test/', '')
let correspondingFilePath = substitute(correspondingFilePath, '.js', '_spec.js', '')
elseif path =~ '/test/'
let correspondingFilePath = substitute(path, '.*\zstest/', 'src/', '')
let correspondingFilePath = substitute(correspondingFilePath, '_spec', '', '')
endif
only
execute "split " . correspondingFilePath
endfunction
:nnoremap <leader>oc :call OpenCorrespondingFile()<cr>
答案 0 :(得分:2)
搜索'.*\zssrc/'
。
.*
消费一切,\zs
标记比赛的开始。