vi命令第三弹

运维技巧 代码 1401浏览

删除命令

ndw或ndW :删除光标处开始及其后的 n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后 n-1行
x或X:删除一个字符, x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令

搜索及替换命令

/pattern:从光标开始处向文件尾搜索 pattern
?pattern:从光标开始处向文件首搜索 pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有 p1均用p2 替代
:n1,n2s/p1/p2/g:将第 n1至n2 行中所有 p1均用p2 替代
:g/p1/s//p2/g:将文件中所有 p1均用p2 替换
/  向后搜索
?  向前搜索
“  跳转到前一个位置
`a  跳转到标记为a的位置
ma  将光标的当前位置标记为 a
`[  跳转到最后一次修改的起始位置
`]  跳转到最后一次修改的结束位置
`”  跳转到上次编辑该文件时光标最后停留的位置
:s  替换
:substitute 替换
:%s/a/a/c 对所有行替换
:m,ns/a/a/c 对从m到 n行替换
rc              用 c 替换光标所指向的当前字符
nrc             用 c 替换光标所指向的前 n 个字符
5rc             用 c 替换光标所指向的前 5 个字符
x               删除光标所指向的当前字符
nx              删除光标所指向的前 n 个字符
3x              删除光标所指向的前 3 个字符
dw              删除光标右侧的字
ndw             删除光标右侧的 n 个字
3dw             删除光标右侧的 3 个字
db              删除光标左侧的字
ndb             删除光标左侧的 n 个字
5db             删除光标左侧的 5 个字
dd              删除光标所在行,并去除空隙
ndd             删除 n 行内容,并去除空隙
3dd             删除 3 行内容,并去除空隙
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个
内存缓冲区中。用户可
将其粘贴到正文中的指定位置。完成这一操作的命令是:
p 小写字母 p ,将缓冲区的内容粘贴到光标的后面
P 大写字母 P ,将缓冲区的内容粘贴到光标的前面
yy              复制当前行到内存缓冲区
nyy             复制 n 行内容到内存缓冲区
5yy             复制 5 行内容到内存缓冲区
/str1           正向搜索字符串 str1
n               继续搜索,找出 str1 字符串下次出现的位置
?str2           反向搜索字符串 str2
给出一个字符串,可以通过搜索该字符串到达指定行。如果希望进行正向搜索,将待搜
索的字符串置于两个“
/”之间;如果希望反向搜索,则将字符串放在两个“ ?”之间。例如:
:/str/                      正向搜索,将光标移到下一个包含字符串 str 的行
:?str?                      反向搜索,将光标移到上一个包含字符串 str 的行
:/str/w file                正向搜索,并将第一个包含字符串 str 的行写入 file
 文件
:/str1/,/str2/w file        正向搜索,并将包含字符串 str1 的行至包含字符串 s
tr2 的行写
正文替换
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/       用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g      用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g  用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g  用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g   功能同上
从上述替换命令可以看到: g 放在命令末尾,表示对搜索字符串的每次出现进行替换;
不加 g,表示只对搜索
字符串的首次出现进行替换; g 放在命令开头,表示对正文中所有包含搜索字符串的行
进行替换操作。
:s/p1/p2/g:将当前行中所有 p1均用p2 替代
:n1,n2s/p1/p2/g:将第 n1至n2 行中所有 p1均用p2 替代
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
字串搜寻与取代
s(substitute) 指令可搜寻某行列范围。
g(global)指令则可搜寻整个编辑缓冲区的资料。
s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条
件的字串,也仅能取代第一个,若想取代所有的字串则需加上 g参数。
7)查找替换
/<C-R><C-W> 把狭义单词 <cword> 写到 搜索命令 行
/<C-R><C-A> 把广义单词 <cWORD> 写到 搜索命令 行
:g/str/s/str1/str2/g
第一个 g表示对每一个包括s1的行都进行替换,
第二个 g表示对每一行的所有进行替换
包括 str的行所有的str1都用 str2替换
:%s/f $/for$/g 将每一行尾部的“f ”( f键和空格键)替换为 for
:%s/^/mv /g 在每一行的头部添加“ mv ”(mv 键和空格键)
:s/fred/<c-r>a/g 替换fred成 register a中的内容,呵呵
:g/<input|<form/p 显示含<input或 <form的行
# 替换一个visual 区域
# 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim 会自动进入 :模式
:'<,’>s/Emacs/Vim/g 前面的'<,’>是 vim自动添加的
# 在多个文档中搜索
:bufdo /searchstr
:argdo /searchstr

转载请注明:代码'S Blog » vi命令第三弹