zlxsmile的个人空间 https://bbs.21ic.com/?502078 [收藏] [复制] [RSS]

日志

VI 常用命令---转自carekee博客

已有 716 次阅读2014-10-17 11:59 |系统分类:模拟技术| VI常用命令

文件操作

:set nu 显示行号
vi +n file 打开文件并移动到第n行
vi +  file 打开文件并移动到最后一行
vi R file / view file  只读打开文件
:w  保存
:w!  覆盖已存在的文件文件
:w newfile 保存为新文件
:wq  保存并退出
ZZ  保存并退出=:wq
:q  退出
:q!  退出不保存修改
:e!  退回到上一次保存的状态
:1,10w newfile 将第一行到第10行保存为新文件
:.,$w >> file 将当前位置到结尾的内容添加到别的文件
:r file  读取file文件的内容

移动
Numeric + h|j|k|l 执行n次操作
h  向左移动(一个字符)
j  向下移动一行
k  向上移动一行
l  向右移动(一个字符)
e/E  移动到单词的末尾
(/)  移动到当前(一下)句的开始
{/}  移动到当前(一下)段的开始
[[/]]  移动到当前(一下)部分的开始
0  移动到行首
$  移动到行末
w  向后移动一个文本块
W  向后移动一个文本块(忽略标点)
b  向前移动一个文本块
B  向前移动一个文本块(忽略标点)
^  移动到当前行的第一个非空白字符
回车/+  移动到下一行的开头的第一个字符
-  移动到上一行的开头的第一个字符
CTRL-F  下翻一屏
CTRL-B  上翻一屏
CTRL-D  下翻半屏
CTRL-U  下翻半屏
z + 回车 将当前行移到屏幕顶部
z.  将当前行移到屏幕中间
z-  将当前行移到屏幕底部
CTRL-L/CTRL-R 重新刷新屏幕
H  移到屏幕的第一行
nH  移到屏幕的第n行
M  移到屏幕的中间
L  移到屏幕的最后一行
nL  移到屏幕的最后一行前的n行
CTRL-L  显示行信息
G  移动到文件的最后一行
nG  移动到文件的第n行
``  移动到上一个位置


编辑
i  在当前位置前插入
I  在行首插入
a  在当前位置后添加
A  在行末添加
o  在当前行下方新建一个空行开始插入
O  在当前行上方新建一个空行开始插入
s  删除当前字符然后进入插入状态
S  删除当前行然后进入插入状态
cw  修改当前词语(删除然后进入插入状态)
c2b 删除前面两个词语
c$ 删除本行当前位置后所有的内容
c0 删除本行当前位置前所有的内容
cc  修改当前行(删除然后进入插入状态)
r  替换当前字符(还保持命令状态)
R  连续替换(进入替换状态)
~  修改当前字符的大小写
J  连接两行

:% s/sclb=\d*\.*\d*e-\d*/sclb=-1/g 把文档中所有sclb=*.*e-*全部替换为sclb=-1



: B,E s/sclb=\d*\.*\d*e-\d*/sclb=-1/g 把文档中B行到E行所有sclb=*.*e-*全部替换为sclb=-1




标记
mx  将当前位置标记为x
'x  移动到标记为x的行
`x  移动到标记为x的位置
``/''  在两次位置间切换


删除
dw  删除一个单词
d2w  删除两个单词
dd  删除当前行
d3d  删除3行
d0  删除当前行中在光标前的所有内容
d$/D  删除当前行中在光标后的所有内容
db  删除前一个单词
x  删除一个字符
3x  删除3个字符


移动
p  粘贴
xp  相当于交换两个字符的位置
yw  复制一个单词


.  重复上一个操作
.  取消上一个操作



搜索
/pattern 从前往后搜
?pattern 从后往前搜
n/N  和上一词搜索方向相同(相反)再搜
fx/Fx  在同一行中查找下(上)一个x字符并移动光标


替换
:s/old/new 替换当前行的第一个匹配
:s/old/new/g 替换当前行的全部匹配
:1,100s/old/new/g 替换1-100行的全部匹配
:1,$s/old/new/g 替换全部匹配=:%s/old/new/g
:g/pattern/s/old/new/g 查找满足pattern条件的行并进行替换



命令组合:
Change Delete Copy from Cursor to ...
cH dH yH top of screen
cL dL yL bottom of screen
c+ d+ y+ next line
c5| d5| y5| column 5 of current line
2c) 2d) 2y) second sentence following
c{ d{ y{ previous paragraph
c/pattern d/pattern y/pattern pattern
cn dn yn next pattern
cG dG yG end of file
c13G d13G y13G line number 13


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (3 个评论)

回复 zlxsmile 2014-10-17 13:28
:set nu 显示行号
回复 zlxsmile 2015-3-9 16:16
1,100s/resistor r=*.*/new/g 替换1-100行的全部匹配

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
回复 zlxsmile 2016-4-13 16:14
:10,20 d 删除10~20行