Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim使用变量搜索或匹配模式_Vim - Fatal编程技术网

vim使用变量搜索或匹配模式

vim使用变量搜索或匹配模式,vim,Vim,在我的最后一个问题中,lcd047为我提供了一个漂亮的脚本。我试图使它更通用,因此,我将固定搜索词“Program”替换为a:arg: function! FixName(arg) let [buf, l, c, off] = getpos('.') call cursor([1, 1, 0]) :let lnum = search('\v\c^" . a:arg ."\s+', 'cnW') if !lnum call cursor(l, c,

在我的最后一个问题中,
lcd047
为我提供了一个漂亮的脚本。我试图使它更通用,因此,我将固定搜索词
“Program”
替换为
a:arg

function! FixName(arg)
    let [buf, l, c, off] = getpos('.')
    call cursor([1, 1, 0])

    :let lnum = search('\v\c^" . a:arg ."\s+', 'cnW')
    if !lnum
        call cursor(l, c, off)
        return
    endif

    "let parts = matchlist(getline(lnum), '\v\c^Program\s+(\S*)\s*$')
    :let parts = matchlist(getline(lnum),'\v\c^" . a:arg ."\s+(\S*)\s*', 'cnW')
    if len(parts) < 2
        call cursor(l, c, off)
        return
    endif

    let lnum = search('\v\c^End\s+Program\s+', 'cnW')
    call cursor(l, c, off)
    if !lnum
        return
    endif

    call setline(lnum, substitute(getline(lnum), '\v\c^End\s+Program\s+\zs.*', parts[1], ''))
endfunction
函数!固定名称(arg)
让[buf,l,c,off]=getpos('.'))
调用游标([1,1,0])
:让lnum=search('\v\c^).a:arg.\s+',cnW')
如果!lnum
调用光标(l、c、off)
返回
恩迪夫
让parts=matchlist(getline(lnum),'\v\c^Program\s+(\s*)\s*$)
:let parts=matchlist(getline(lnum),“\v\c^”.a:arg.\s+(\s*)\s*”,“cnW”)
如果透镜(零件)<2
调用光标(l、c、off)
返回
恩迪夫
让lnum=search('\v\c^End\s+Program\s+','cnW')
调用光标(l、c、off)
如果!嗯
返回
恩迪夫
调用setline(lnum,替换(getline(lnum),'\v\c^End\s+Program\s+\zs.*',parts[1],'')
端功能
它不起作用。没有错误,没有变化,正如替代者所希望的那样


我还希望它不区分大小写。

只需将每个
程序
单词替换为
a:word
,如:

function! FixName(word)
    let [buf, l, c, off] = getpos('.')
    call cursor([1, 1, 0]) 

    let lnum = search('\v\c^' . a:word . '\s+', 'cnW')
    if !lnum
        call cursor(l, c, off)
        return
    endif

    let parts = matchlist(getline(lnum), '\v\c^' . a:word . '\s+(\S*)\s*$')
    if len(parts) < 2 
        call cursor(l, c, off)
        return
    endif

    let lnum = search('\v\c^End\s+' . a:word . '\s+', 'cnW')
    call cursor(l, c, off)
    if !lnum
        return
    endif

    call setline(lnum, substitute(getline(lnum), '\v\c^End\s+' . a:word . '\s+\zs.*', parts[1], ''))
endfunction
函数!固定名称(word)
让[buf,l,c,off]=getpos('.'))
调用游标([1,1,0])
让lnum=search('\v\c^'.a:word'\s+','cnW')
如果!嗯
调用光标(l、c、off)
返回
恩迪夫
让parts=matchlist(getline(lnum),'\v\c^'.a:word.'\s+(\s*)\s*$)
如果透镜(零件)<2
调用光标(l、c、off)
返回
恩迪夫
让lnum=search('\v\c^End\s+'.a:word.'\s+','cnW')
调用光标(l、c、off)
如果!嗯
返回
恩迪夫
调用setline(lnum,替换(getline(lnum),'\v\c^End\s+'.a:word.'\s+\zs.*',parts[1],'')
端功能
由于在每次搜索开始时出现
\c
atom,解决方案已匹配忽略大小写