vim仅在未注释的行上搜索和替换

vim仅在未注释的行上搜索和替换,vim,replace,syntax,full-text-search,Vim,Replace,Syntax,Full Text Search,我试图搜索和替换只在非评论行 我所说的非注释行,是指未被vim语法高亮显示灰显的行 例如: /* ... 不要更换 .... */ 不应进行搜索和替换。 我的问题是针对C++的,但是如果有一种方法可以使用VIM的“语法引擎”,则可以扩展到任何语言。 编辑:该链接只是关于搜索,而不是关于替换。我终于自己完成了,并将其用作基础: function Repl(pattern, patternSub) " Move to top of the file normal 1G

我试图搜索和替换只在非评论行

我所说的非注释行,是指未被vim语法高亮显示灰显的行

例如:

/*
...
不要更换
....
*/
不应进行搜索和替换。 我的问题是针对C++的,但是如果有一种方法可以使用VIM的“语法引擎”,则可以扩展到任何语言。
编辑:该链接只是关于搜索,而不是关于替换。

我终于自己完成了,并将其用作基础:

function Repl(pattern, patternSub)

    " Move to top of the file
    normal 1G

    " Search Pattern, no wrap
    while search(a:pattern, "W", "", "") > 0

        " If found pattern is a comment, skip
        if eval(synIDattr(synID(line("."), col("."), 0), "name") =~? "Comment")
            continue
        endif

        " If found pattern is a string, skip
        if eval(synIDattr(synID(line("."), col("."), 0), "name") =~? "String")
            continue
        endif

        " Replace pattern by it's substitute
        exec '.s/'.a:pattern.'/'.a:patternSub.'/'

        " Restore cursor position
        normal ``
    endwhile
endfunction

command! -nargs=+ -complete=command Repl call Repl(<args>)

可能是重复的:如果你可以折叠你的评论,你可以关闭它们并使用
:folddopen s/foo/bar/gc
。折叠区域被搜索并替换为vimNo,而不是
:folddopen
。是的,你是对的,我将尝试自动化所有这些。
:Repl '( *','('