vim仅在未注释的行上搜索和替换
我试图搜索和替换只在非评论行 我所说的非注释行,是指未被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
/*
...
不要更换
....
*/
不应进行搜索和替换。
我的问题是针对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 '( *','('