vim/gvim: 文本搜索和替换命令和常用技巧例 | 您所在的位置:网站首页 › nzone和华为有关系吗 › vim/gvim: 文本搜索和替换命令和常用技巧例 |
目录 1. 文本搜索 1.1 基本命令 1.2 全词搜索 1.3 搜索当前字符串 1.4 pattern中包含特殊字符 1.5 忽略大小写的搜索 1.6 高亮(Highlight)现实搜索结果 2. 文本替换 基本语法 range的指定方式 替换命令历史查询和使用 例1:文件中全局替换 例2:当前行中替换,忽略大小写 例3:在指定的行范围内进行替换 例4:在选中的行中进行替换 例5:针对文件的前若干行进行替换 例6:全词匹配替换 例7:提醒确认的替换(交互确认式替换) 例8:给每一行的行首添加行号 例9:给每一行行尾添加某一字符串 例10:给每一行行首添加某一字符串 例11:删除或保留所有不包含某字符串的行 例12:删除某字符串 例13:忽略大小写的替换 例14:基于正则表达式的替换 1. 文本搜索 1.1 基本命令在vim/gvim的normal模式(再任意其它模式按ESC键回到normal mode),按“/”或者“?”后面跟所要搜索的pattern,然后按回车开启对pattern的搜索: /pattern ?pattern 进入搜索模式后,按“n”表示寻找下一个,按“N”(shift + n)表示寻找上一个。 1.2 全词搜索以上基本命令只是将pattern当作字符串进行匹配,比如说搜索“/world”的话,文本中的“hello_world”也会匹配上。如果要进行全词(whole word)匹配的话,需要用以"/"的格式进行搜索。 /\\ 1.3 搜索当前字符串将光标放在文本中待搜索字符串pattern上,然后按“*”表示向前搜索该pattern,按“#”表示向后搜索该pattern。持续按“*”或者“#”的话会持续向前或者向后搜索。 1.4 pattern中包含特殊字符pattern中包含特殊字符时,需要用“\”将其进行转义处理。 比如说,要搜索文本文件中的scoreboard[4], 这里"["和“]”是特殊字符。 错误的搜索命令: /scoreboard[4] 正确的搜索命令: /scoreboard\[4\] 1.5 忽略大小写的搜索缺省条件下vim的搜索是case-sensitive(大小敏感的) ,可以用属性“\c”来告诉vim在搜索时忽略大小写,如下所示: /\\c 另一个解决办法是用以下命令告诉vim在本次编辑过程中都忽视大小写。 :set ignorecase 当然,也可以在~/.vimrc文件中追加以上这条命令,这样,vim就会把缺省行为修改为搜索处理中忽略大小写。 1.6 高亮(Highlight)现实搜索结果Vi(m) has a useful feature that highlights search results in the file. To enable highlighting, type the following command in the text editor: :set hlsearchTo disable this feature run: :set !hlsearch当然,同样可以在~/.vimrc中追加这条命令使其成为缺省行为。 2. 文本替换 基本语法gvim编辑文本时可以用以下命令进行文本替换。 :[range]s[ubstitute]/{old_string}/{new_string}/[flags] [count]可以把old_string看作是一个用于搜索匹配的pattern(后文pattern与old_string互换使用)。 其中, "s" 指的是substitute(替换) 如果没有指定[range] 和 [count]的话,仅对当前行进行处理。当前行是指光标所处行。 “/”表示定界符(delimiter),但是...Instead of the slash character (/), you can use any other non-alphanumeric single-byte character except as a delimiter. This option is useful when you have the ‘/’ character in the search pattern or the replacement string.比如说: :s|foo|bar| range的指定方式百分号 % 用于表示从第一行到最后一行,即以整个文件作为处理范围。 用逗号分隔的两个数字表示搜索范围,两个数字分别表示起始行号和终止行号(inclusive,即包含这两个数字所指的行): :3,10s/foo/bar/g “.”表示当前行,“$”表示最后一行。 :.,$s/foo/bar/ 还可以用+和-来表示基于前一个行号指示,指定第2个行号指示相对于前一个的偏移值。比如说从当前行到从当前行后数第4行为止的范围内进行替换: :.,+4s/foo/bar/g flags有以下几种: [c] Confirm each substitution.即每次替换都提请确认。如果不加c则自动替换掉。[g] Replace all occurrences in the specified range. 指定范围中所有找到的old_string都替换成new_string。如果不指定g,则仅替换指定范围中找到的第一个old_string[i] Ignore case for the pattern. 忽视大小写。 替换命令历史查询和使用vim会跟踪记录当前编辑会话期间所有命令。可以键入“:s”以查询当前编辑会话期间所有替换命令,用up/down来选定,然后回车即可重复执行。当然也可以在选定后进行必要的修改之后再执行。 例1:文件中全局替换:%s/old_string/new_string :%s/old_string/new_string/g 在以上例中,"%"表示指定整个文件作为操作范围,即%与g结合表示对整个文件进行全局替换 例2:当前行中替换,忽略大小写 :s/I/We/gi 例3:在指定的行范围内进行替换 :1,10s/helo/hello/g将从第1行到第10行范围内的‘helo’全部替换为‘hello’。 例4:在选中的行中进行替换首先,选定所要操作的行范围。可用用鼠标操作,也可以按Ctrl+V,然后用导航键(navigation key,即四个箭头键)进行范围选中。然后点击“:”会自动生成“:'”,然后可以用如下命令进行选定范围内的替换: :' |
CopyRight 2018-2019 实验室设备网 版权所有 |