当前位置: 技术问答>linux和unix
UNIX中的vi问题
来源: 互联网 发布时间:2015-03-06
本文导语: 各位,在编辑状态下怎么消除前一个字符,请指教 | X删除当前光标的前一字符,顺便多提供点: 插入 i在当前光标前插入文本 a在当前光标后插入文本 I在当前行的第一个非空字符前插入文...
各位,在编辑状态下怎么消除前一个字符,请指教
|
X删除当前光标的前一字符,顺便多提供点:
插入
i在当前光标前插入文本
a在当前光标后插入文本
I在当前行的第一个非空字符前插入文本
A在当前行的尾字符后插入文本
o在当前行后产生一个新行插入文本
O在当前行前产生一个新行插入文本
删除
x删除光标所在处的字符;若有记数,则向右删除指定数目的字符(包括当前字符)
X删除当前光标的前一字符;若有记数,则向左删除指定数目的字符(不包括当前字符)
dd整行删除,允许记数
dw删除一个单词,包括下一个空格
dW删除一个单词,包括标点和下一个空格
D删除当前行光标右侧的全部字符(包括当前字符)
d[光标移动]*删除光标移动所确定的字符
u废除上一命令
U将当前行恢复成原有状态
d)从当前光标位置一直删除到当前句子的尾端
d}从当前光标位置一直删除到当前段的尾端
修改
.重复最近的一次改变了正在编辑的缓冲区内容的插入或删除操作
Rx用x替代当前光标所在位置的字符,命令不改变编辑模式,允许记数
R进入输入模式,键入的内容将替换本行光标后的内容,若键入的内容未超出本行,则剩余的字符不被替换
s删除当前字符,并进入输入模式,当前字符后的内容不变,允许记数,删除多个字符,再进入输入模式
S删除当前行,并进入输入模式,允许记数,删除多行,再进入输入模式
文本移动
p在当前光标所在位置之后复制临时缓冲区中的内容,临时缓冲区的内容是最近的删除或复制命令送入的文本
yy将当前行的内容送入临时缓冲区,允许记数
yx将一个x类型的文本内容送入临时缓冲区,允许记数
"wyx将一个x类型的文本内容送入由字母w命名的寄存器,允许记数,记数值放在y前搘
"wp将寄存器w中的内容复制到当前光标所在位置之后
查找
/pattern向后搜索指定模式(pattern)的内容
?pattern向前搜索指定模式(pattern)的内容
n在同一方向重复搜索/或?指定的内容
N在反方向重复搜索/或?指定的内容
f char在当前行向后查找指定字符(char),光标定位于该字符
F char在当前行向前查找指定字符(char),光标定位于该字符
t char在当前行向后查找指定字符(char),光标定位于该字符的前一字符
T char在当前行向前查找指定字符(char),光标定位于该字符的前一字符
;在同一方向重复f、F、t、T命令
~ 改变光标所在位置的字母的大小写
例子:
拷贝一个函数(既拷贝多行):
1 :set number
则显示行号,如:
29 void check_n_close ( ftpinfo , status )^M
30 FTP *ftpinfo;^M
31 int status;^M
32 {^M
33 LogPrn( 1 , 1 , "Error Message:%sn" , FtpMessage(ftpinfo->errno));^M
34 LogPrn( 1 , 1 , "errno=%s,herrno=%sn" , strerror(errno) , hstrerror(h_errno)); ^M
35 FtpQuickBye(ftpinfo);^M
36 }^M
2 光标移到29行处(29G)
3 8yy(既拷贝8行)
4 光标移到想要去的位置
5 p既粘贴刚才的8行数据
注意由于拷贝的内容是在临时缓冲区,所有在yy、p前不能够做覆盖临时缓冲区的操作
(一般来说除光标移动的操作都会覆盖临时缓冲区,所以在yy后应该马上移到相应位置然后p)
删除多行:
dd整行删除,允许记数,则xdd表示删除本行后x行
插入
i在当前光标前插入文本
a在当前光标后插入文本
I在当前行的第一个非空字符前插入文本
A在当前行的尾字符后插入文本
o在当前行后产生一个新行插入文本
O在当前行前产生一个新行插入文本
删除
x删除光标所在处的字符;若有记数,则向右删除指定数目的字符(包括当前字符)
X删除当前光标的前一字符;若有记数,则向左删除指定数目的字符(不包括当前字符)
dd整行删除,允许记数
dw删除一个单词,包括下一个空格
dW删除一个单词,包括标点和下一个空格
D删除当前行光标右侧的全部字符(包括当前字符)
d[光标移动]*删除光标移动所确定的字符
u废除上一命令
U将当前行恢复成原有状态
d)从当前光标位置一直删除到当前句子的尾端
d}从当前光标位置一直删除到当前段的尾端
修改
.重复最近的一次改变了正在编辑的缓冲区内容的插入或删除操作
Rx用x替代当前光标所在位置的字符,命令不改变编辑模式,允许记数
R进入输入模式,键入的内容将替换本行光标后的内容,若键入的内容未超出本行,则剩余的字符不被替换
s删除当前字符,并进入输入模式,当前字符后的内容不变,允许记数,删除多个字符,再进入输入模式
S删除当前行,并进入输入模式,允许记数,删除多行,再进入输入模式
文本移动
p在当前光标所在位置之后复制临时缓冲区中的内容,临时缓冲区的内容是最近的删除或复制命令送入的文本
yy将当前行的内容送入临时缓冲区,允许记数
yx将一个x类型的文本内容送入临时缓冲区,允许记数
"wyx将一个x类型的文本内容送入由字母w命名的寄存器,允许记数,记数值放在y前搘
"wp将寄存器w中的内容复制到当前光标所在位置之后
查找
/pattern向后搜索指定模式(pattern)的内容
?pattern向前搜索指定模式(pattern)的内容
n在同一方向重复搜索/或?指定的内容
N在反方向重复搜索/或?指定的内容
f char在当前行向后查找指定字符(char),光标定位于该字符
F char在当前行向前查找指定字符(char),光标定位于该字符
t char在当前行向后查找指定字符(char),光标定位于该字符的前一字符
T char在当前行向前查找指定字符(char),光标定位于该字符的前一字符
;在同一方向重复f、F、t、T命令
~ 改变光标所在位置的字母的大小写
例子:
拷贝一个函数(既拷贝多行):
1 :set number
则显示行号,如:
29 void check_n_close ( ftpinfo , status )^M
30 FTP *ftpinfo;^M
31 int status;^M
32 {^M
33 LogPrn( 1 , 1 , "Error Message:%sn" , FtpMessage(ftpinfo->errno));^M
34 LogPrn( 1 , 1 , "errno=%s,herrno=%sn" , strerror(errno) , hstrerror(h_errno)); ^M
35 FtpQuickBye(ftpinfo);^M
36 }^M
2 光标移到29行处(29G)
3 8yy(既拷贝8行)
4 光标移到想要去的位置
5 p既粘贴刚才的8行数据
注意由于拷贝的内容是在临时缓冲区,所有在yy、p前不能够做覆盖临时缓冲区的操作
(一般来说除光标移动的操作都会覆盖临时缓冲区,所以在yy后应该马上移到相应位置然后p)
删除多行:
dd整行删除,允许记数,则xdd表示删除本行后x行
|
去FANGQIANG.COM
或man vi
或man vi
|
命令模式下 X
|
前面的老大不必那么强吧?delete也可啊