vi的搜索和替换

搜索中进行替换
/which  #搜索which
cwthat  #替换成that
n       #重复搜索
.       #重复替换

一种类型的替换命令
g/pattern/s/old/new/g

第一个 g 表示是有选择的操作, pattern 指定选择行的模式, s 表示替换操作, old 是要替换的内容, new 是新内容, g 表示全局替换下面是一些例子:
#给第一到十行加上括弧
:1,10/.*/(&)/

其中的
 &    代表的是搜索模式
 ~    代表上一次替换命令中制定的替换文本
 \u   改成大写
 \l   改成小写
 \U或者\L和\e或者\E配合 将后面开始到被替换串结束或者到\e和\E为止的所有支付变成大写或者小写
 另外在vi中可以使用除了\,",和|之外的任何非字母表字符做替换命令的分隔符, 这在进行路径替换的时候非常的有用

下面时一些例子:
   #将That or this 换成 This or that
   :%s/\(That\) or \(this\)/\u\2 or \l\1/
   ----
   #将句尾的child换成children
   :%s/child\([ ,.;!:?]\)/children\1/g
   ----
   #将mgi/r/abox换成mgi/r/asquare
   :g/mg\([ira]\)box/s//mg//my\1square/g    <=>  :g/mg[ira]box/s/box/square/g
   ----
   #将多个空格换成一个空格
   :%s/  */ /g
   ----
   #使用空格替换句号或者冒号后面的一个或者多个空格
   :%s/\([:.]\)  */\1 /g
   ----
   #删除所有空行
   :g/^$/d
   ----
   #删除所有的空白行和空行
   :g/^[     ][     ]*$/d
   ----
   #在每行的开始插入两个空白
   :%s/^/>  /
   ----
   #在接下来的6行末尾加入.
   :.,5/$/./
   ----
   #颠倒文件的行序
   :g/.*/m0O  <=> :g/^/m0O
   ----
   #寻找不是数字的开始行,并将其移到文件尾部
   :g!/^[0-9]/m$ <=> g/^[^0-9]/m$
   ----
   #将文件的第12到17行内容复制10词放到当前文件的尾部
   :1,10g/^/12,17t$
    ~~~~重复次数的作用
   ----
   #将chapter开始行下面的第二行的内容写道begin文件中
   :g/^chapter/.+2w>>begin
   ----
   :/^part2/,/^part3/g/^chapter/.+2w>>begin
   ----
   :/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$

ex的命令
d 删除
m 移动
co 复制
t 复制行
p 打印
nu 显示行号
g 命令用于寻找匹配的行,然后执行相应的操作
v 反向寻找匹配的的行,然后执行相应的操作

ex中用;代替,做行分界符时会将;前面的行改变成当前行 

选项设置
#设置tab宽度
:set tabstop=4

#设置缩进时移动的宽度
:set shiftwidth=4

#设置语法高亮模式
:set syntax=fvwm

#关闭备份
:set nobackup
:set nowritebackup

#建议按照如下的方式使用备份
:set backup
:set backupdir=/var/bak
:set backupext=.bak

#下面一些选项是一次听讲座的时候记录的, 具体什么意思没有记清楚, 但应该很有用的
:set nocp
:set su
:set his
:set cin
:set sm    #显示匹配的括号
:set ai    #自动缩进
:set cino=:ogotocsus
:set paste/nopaste
:set lbr
:set font=mb
:set cindent #打开c缩进模式

#打开语法高亮显示
:syntax on 

#格式重排
=

建议的主题配置:
colo torte #图形模式
colo else  #字符模式

命令与键
为了防止ex对特殊键进行解释, vi中可以用C-v对其进行跳脱.如下所示:
[RETURN]      ^M
[ESC]         ^[
[BACKSPACE]   ^H
C-T           ^T
C-W           ^W
C-x           ^X
|             不能转义

map!用于在插入模式下强制映射, unmap!用于在插入模式下取消映射
映射一个功能键
:map #1 command #映射第一个功能键, 即F1
:map [C-v][Home] command #映射home键

od命令可以用来以8进制方式查看文件
@register 执行register中的文本作为命令
r命令可以用于读入文件或者将命令的输出读入当前的缓冲区
r file #读入文件
r! ls  #读入命令输出

增加和减少缩进级别在vi的自动缩进模式中,可以通过下面的命令更改缩进级别
C-T     增加一个缩进级别
C-D     减少一个缩进级别
^ ^D    光标移到开始,并保留缩进级别
0 ^D    光标移到开始,并重置缩进级别

可以通过下面的命令设置自动缩进模式
:set autoindent

<<和>>是进行缩进和反缩进的命令
>>     把行或者块右移8个空格
<<     把行或者块左移8个空格

显示控制字符
:set list   #临时的等价命令是l

启用括号匹配
:set showmatch #:set sm

-设置显示模式
:normal     #正常模式
:syntax     #语法高亮模式
:hex        #十六进制模式
:html       #html模式
:man        #man模式
:set binary #二进制模式
:set incsearch  #增量搜索模式
:set showmode   #可视模式

cindent 按照c的格式缩进
在vi中查看c源码的时候, 可以在#include "hell.h" 在双引号中间安gf就可以打开头文件, C-o(C-t)返回.
窗体分割命令
 [N] sp[lit] [position] [file]
 [N] new     [position] [file]
 [N] sv[iew] [position] [file]

缩写文本
#用myurl代表http:://localhost/
:ab myurl http:://localhost/
#取消缩写
:una myurl

使用ctags
:! ctags *.c      #建立tags文件
: tag name
^]                #查看tag定义 

命令的选项:
-d
-g
-l                #指定语言
-m                #为结构的成员建立索引
-t                #为c的typedef建立索引
-T                #为C++的typedef建立索引

宏
vi中在全文前植入行号的宏
:%s/^/^|/
:$
:let end=line(".")
:|
:let num=1
:while num<=end
:let line=getline(".")
:let line=substitude(line,$,num," ")
:call setline(".", line)
:+
:let num=num+1
:endwhile

插件
tip of the day
calendar
jad
sketch
其他
加密

:X #之后输入密码, :wq退出即可, 去掉密码只要在输入提示输入密码的时候输入回车即可

将dos文件转化为linux文件
:1,$s///g

在每行的行首/尾插入newstring
#行首
:g/^/s//newstring/g
:%s/^/newstring/g
行尾
:g/$/s//newstring/g
:%s/$/newstring/g
时间: 2024-12-21 07:42:37

vi的搜索和替换的相关文章

webstorm正则搜索与替换

div{ clear: both; } --> webstorm正则搜索与替换 序号  功能 代码 1 所有p标签及内部内容 <p>[\s\S]*?</p> 2 匹配body内容  <body[\s\S]*?</body>       默认配置-Eclipse的常用快捷键对照表 查找/代替 Webstorm快捷键 Eclipse快捷键 说明 ctrl+shift+N ctrl+shift+R 通过文件名快速查找工程内的文件(必记) ctrl+shift+al

sublime搜索和替换-单文件搜索

Searching To open the search panel for the active file, press Ctrl + F. Someoptions and actions available through this panel can be controlled from thekeyboard: Toggle Regular Expressions Alt + R Toggle Case Sensitivity Alt + C Toggle Exact Match Alt

sublime搜索和替换--多文件搜索替换

Search and Replace - Multiple Files Searching To open the search panel for files, press Ctrl + Shift + F. You can use thekeyboard to control some search panel options and search actions: Toggle Regular Expressions Alt + R Toggle Case Sensitivity Alt

emacs搜索和替换

搜索/替换(Seach/Replace) C-s 向后搜索 C-r 向前搜索 C-g 回到搜索开始前的位置(如果你仍然在搜索模式中) M-% 询问并替换(query replace) Space或y 替换当前匹配 Del或n 不要替换当前匹配 . 仅仅替换当前匹配并退出(替换) , 替换并暂停(按Space或y继续) ! 替换以下所有匹配 ^ 回到上一个匹配位置 RETURN或q 退出替换 使用正则表达式(Regular expression)搜索/替换 可在正则表达式中使用的符号: ^ 行首

vi中的正则表达式替换

今天接到了个任务,要将字符串Test("\r\nABC")替换为Test("ABC\n"),其中使用到了分组替换的方法,使用vi执行如下命令进行替换: %s/"\(\\r\\n\)\([^\\]*\)"/"\2\\n"/g %s - vi的替换命令 尾部的/g意味全局替换 "\(\\r\\n\)\([^\\]*\)" 部分 其中 \(\)的方式为匹配后为设定分组编号,系统会自动进行编号,后面通过\1 \2这

字符串忽略大小写的搜索和替换

需求:字符串忽略大小写搜索和替换 解决: 使用re.IGNORECASE import re text = 'UPPER PYTHON, lower python, Mixed Python' f = re.findall("python", text, flags=re.IGNORECASE) print(f) s, n = re.subn("python","snake",text, flags=re.IGNORECASE) print(s)

43 正则中用sub和subn函数搜索与替换 使用split函数分隔字符串 练习题

第10课 正则中用sub和subn函数搜索与替换 # 使用sub和subn函数搜索和替换 ''' sub(正则表达式,要替换的字符串,母字符串) ''' import re result = re.sub('Bill','Mike', 'Bill is my son.') print(result) # Mike is my son. 把Bill 替换成 Mike result = re.subn('Bill', 'Mike', 'Bill is my son, I like Bill') pr

vi、vim 查找替换

vi/vim 中可以使用 :s 命令来替换字符串.该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询.    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky    :s/vivian/sky/g 替换当前行所有 vivian 为 sky    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivi

广度优先搜索——字符串替换

经典的字符串转换问题:http://codevs.cn/problem/1099/ 昨天刚学了广度搜索,今天就用上了,一开始百度了一下,看到所有人都是在用双向广度搜索,现在还是很不明白双向的原理,居然不需要判重!!!速度快这个容易理解,好吧,骚年加油,今天ccf认证考试,明天再来学双向的! 首先说说这个吧,广度搜索最关键的还是这两个点: 1. 如何建立搜索树? 2. 如何判断状态重复? 第一,每个结点的状态如何延伸呢?在这个问题里,当然是字符串的查找,每找到一个可以被替换的位置,那么就是一个可延