今天我开始使用vim。我对:g
和:%s
命令感到困惑。那么,:g
或:%s
命令有什么区别?有什么区别:g和:%s命令在vim中
回答
:g
上匹配正则表达式的所有行执行命令:
:g/LinesThatMatchThisRegex/ExecuteThisCommand
实施例:
:g/hello/d
这将删除(d
)包含你好所有行。
在另一方面,:%s
只是执行搜索(在正则表达式),本文件替换:
:%s/hello/world/g
(该g
也意味着全球化,所以它会取代所有的人,而不仅仅是一个每行,如果要手动确认每个替换项,也可以使用c
标志(:%s/hello/world/gc
)。
这将替换所有出现的hello
与world
。
:g
和:%s
命令都支持正则表达式。
s
命令意味着substitute
和%
意味着整个缓冲区。所以%s
意味着整个缓冲区的替代。您也可以输入一行范围:
:10,15s/hello/world/g
这将执行前面仅在第10行至第15行(含)的搜索和替换。
':g'只能在当前缓冲区中执行,与':s'相同。它们唯一的区别在于默认的范围:':s'和':.s'相同,':g'是':%g'。因此':%s/pat/subs'和':%g/pat/cmd'(或':g/...')将作用于缓冲区中与pat匹配的所有行,而':.s /如果匹配pat,pat/subs'(或':s/...')和':.g/pat/cmd'将在当前行上起作用。 – mMontu 2014-09-05 12:45:32
它们是不同的。
:g
可以执行命令匹配的行。 :s
是这些命令之一。也就是说,你可以结合:g and s
:%s
只是搜索和替换整个缓冲区,即使它可以做一些其他的事情表达过,但它并不像:g
那么简单。
例如为:
:g/foo/s/bar/blah/g
这会做包含foo
线bar->blah
替代。随着:s
我们可以:
:%s/foo/\=substitute(getline('.'), 'bar','blah','g')
所以:g
更容易。
所以如果你正在处理替代任务,通常应该首先提出:s
。如果您想对所有匹配xxx的行执行类似的操作,我想删除/ join/indent/.......:g
可能对您有所帮助。
- 1. vim中的C,cc和S命令有什么区别
- 2. vi/vim中的s,c和r命令有什么区别?
- 3. Vim中命令cw和ciw有什么区别?
- 4. 在Perl中,s/^ \ s + //和s/s + $ //有什么区别?
- 5. char * s和char * s有什么区别?
- 6. s ++和* s ++有什么区别吗?
- 7. Javascript中“s”和“e”有什么区别
- 8. ,“la”和“ld”命令有什么区别?
- 9. mvn:deploy和mvn:install命令有什么区别?
- 10. linux和unix命令有什么区别?
- 11. %u&%g?有什么区别?
- 12. vim中de和dw有什么区别?
- 13. Vim中b和B有什么区别?
- 14. elasticbean中的命令和容器命令有什么区别
- 15. 'gcc -g'和'gcc -g3'有什么区别?
- 16. g ++和gcc有什么区别?
- 17. sudo -s和sudo有什么区别
- 18. \ s和\ t有什么区别?
- 19. “黄瓜”命令和“耙黄瓜”命令有什么区别?
- 20. 运行命令和cmd命令有什么区别?
- 21. MacVim和Vim有什么区别?
- 22. MacVim和普通Vim有什么区别?
- 23. 正则表达式中的\(\((。+?)\)\)和\(\(\ s *(。+?)\ s * \)\)有什么区别?
- 24. '>'和'#'在Linux中的命令行界面有什么区别?
- 25. C,I和S命令组合在VIM
- 26. 这两个命令有什么区别?
- 27. 这些git命令有什么区别?
- 28. 有什么区别复制命令 - windows
- 29. 一些OpenCV命令有什么区别?
- 30. 这些POST命令有什么区别?
':%s'是应用于整个文档的替代命令,不是作为':g'的全局公共前缀。 – 2014-09-05 11:16:13
@ Jean-KarimBockstael我认为你将':g [lobal]'命令与选项和变量的'g:[name]'前缀相混淆。 – 2014-09-05 11:35:52
如果您今天开始使用vim,我强烈建议您使用vim-tutor。你可以用':help tutor'直接在vim中找到关于它的信息。 – mMontu 2014-09-05 12:55:56