gpt4 book ai didi

javascript - vimscript 替换最后一次出现(用于打开相应的测试/规范文件)

转载 作者:行者123 更新时间:2023-11-28 21:10:00 25 4
gpt4 key购买 nike

我写了一个函数,它为我打开一个相应的文件。

我在我的编码项目中有一个约定,我将测试文件保存在与要测试的原始文件相同的子文件夹结构中。

例如:

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/", "")

提前致谢!

更新:重构函数

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>

最佳答案

搜索 '.*\zssrc/'

  • .* 消费一切,
  • \zs来标记比赛的开始。

关于javascript - vimscript 替换最后一次出现(用于打开相应的测试/规范文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com