VI
编辑小技巧
Vi
提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令。它们分别是
H
、
M
和
L
命令。
(1)H
命令
该命令将光标移至屏幕首行的行首(即左上角),也就是当前屏幕的第一行,而不是整个文件的第一行。利用此命令可以快速将光标移至屏幕顶部。若在
H
命令之前加上数字
n
,则将光标移至第
n
行的行首。值得一提的是,使用命令
dH
将会删除从光标当前所在行至所显示屏幕首行的全部内容。
(2)M
命令
该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满
,
则移动到整个屏幕的中间行;如果并未充满,则移动到文本的那些行的中间行。利用此命令可以快速地将光标从屏幕的任意位置移至屏幕显示文件的中间行的行首。例如,在上面屏幕显示的情况下(不论光标在屏幕的何处),在命令模式下,输入命令
M
之后,光标都将移到
add
这一行的字母
a
上。同样值得一提的是,使用命令
dM
将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容。
(3)L
命令
当文件显示内容超过一屏时,该命令将光标移至屏幕上的最底行的行首;当文件显示内容不足一屏时,该命令将光标移至文件的最后一行的行首。可见,利用此命令可以快速准确地将光标移至屏幕底部或文件的最后一行。若在
L
命令之前加上数字
n
,则将光标移至从屏幕底部算起第
n
行的行首。同样值得一提的是,使用命令
dL
将会删除从光标当前行至屏幕底行的全部内容。
让我们看看最简单也是最常用的编辑过程:没有人不犯错误。所以迟早你会碰到修改你输入的文本的时候。实际上花在字处理上的大多数时间是修改而不是输入新的东西。因此,你要知道如何方便地修改就很重要。
(1)x
�C删除一个字符
删除文字的最简单的方式是用
x
。这个命令的结果是光标所处的字符的消失,后面的文字左移动。如果你删除的字符是一行最后的一个字符,那么光标将向左移动一个,这样光标就不会停留在不存在的字符的下面了。假如没有任何文字了,喇叭就叫。
(2)d
�C删除对象
这个命令的右边还要有一定的文字对象。文字对象就是一块文字。他右边接的就是在控制光标移动的那些字符。例如
w
表示向前一个单词,那么
dw
将删除下一个单词。
5w
表示前进
5
个单词,那么
d5w
将删除他们。
(3)dd
�C删除一行
最常用的
d
系列命令之一。和前面一样,
5dd
将删除
5
行
(4)D
�C整个删除
大写形式的
D
用来删除从光标到行尾。和
d$
一样效果。
(5)u
�C恢复
要后悔吗?他不仅仅撤消删除,还撤消你所有的编辑工作。
(6).
�C重复
重复编辑工作。
###################################################################################
进入
vi
的命令
vi filename :
打开或新建文件,并将光标置于第一行首
vi +n filename
:打开文件,并将光标置于第
n
行首
vi + filename
:打开文件,并将光标置于最后一行首
vi +/pattern filename
:打开文件,并将光标置于第一个与
pattern
匹配的串处
vi -r filename
:在上次正用
vi
编辑时发生系统崩溃,恢复
filename
vi filename
…
.filename
:打开多个文件,依次进行编辑
移动光标类命令
h
:光标左移一个字符
l
:光标右移一个字符
space
:光标右移一个字符
Backspace
:光标左移一个字符
k
或
Ctrl+p
:光标上移一行
j
或
Ctrl+n
:光标下移一行
Enter
:光标下移一行
w
或
W
:光标右移一个字至字首
b
或
B
:光标左移一个字至字首
e
或
E
:光标右移一个字至字尾
)
:光标移至句尾
(
:光标移至句首
}
:光标移至段落开头
{
:光标移至段落结尾
nG
:光标移至第
n
行首
n+
:光标下移
n
行
n-
:光标上移
n
行
n$
:光标移至第
n
行尾
H
:光标移至屏幕顶行
M
:光标移至屏幕中间行
L
:光标移至屏幕最后行
0
:(注意是数字零)光标移至当前行首
$
:光标移至当前行尾
屏幕翻滚类命令
Ctrl+u
:向文件首翻半屏
Ctrl+d
:向文件尾翻半屏
Ctrl+f
:向文件尾翻一屏
Ctrl
+
b
;向文件首翻一屏
nz
:将第
n
行滚至屏幕顶部,不指定
n
时将当前行滚至屏幕顶部。
插入文本类命令
i
:在光标前
I
:在当前行首
a
:光标后
A
:在当前行尾
o
:在当前行之下新开一行
O
:在当前行之上新开一行
r
:替换当前字符
R
:替换当前字符及其后的字符,直至按
ESC
键
s
:从当前光标位置处开始,以输入的文本替代指定数目的字符
S
:删除指定数目的行,并以所输入文本代替之
ncw
或
nCW
:修改指定数目的字
nCC
:修改指定数目的行
删除命令
ndw
或
ndW
:删除光标处开始及其后的
n-1
个字
do
:删至行首
d$
:删至行尾
ndd
:删除当前行及其后
n-1
行
x
或
X
:删除一个字符,
x
删除光标后的,而
X
删除光标前的
Ctrl+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
替换
选项设置
all
:列出所有选项设置情况
term
:设置终端类型
ignorance
:在搜索中忽略大小写
list
:显示制表位
(Ctrl+I)
和行尾标志(
$)
number
:显示行号
report
:显示由面向行的命令修改过的数目
terse
:显示简短的警告信息
warn
:在转到别的文件时若没保存当前文件则显示
NO write
信息
nomagic
:允许在搜索模式中,使用前面不带“
\
”的特殊字符
nowrapscan
:禁止
vi
在搜索到达文件两端时,又从另一端开始
mesg
:允许
vi
显示其他用户用
write
写到自己终端上的信息
最后行方式命令
:
n1,n2 co n3
:将
n1
行到
n2
行之间的内容拷贝到第
n3
行下
:
n1,n2 m n3
:将
n1
行到
n2
行之间的内容移至到第
n3
行下
:
n1,n2 d
:将
n1
行到
n2
行之间的内容删除
:
w
:保存当前文件
:
e filename
:打开文件
filename
进行编辑
:
x
:保存当前文件并退出
:
q
:退出
vi
:
q!
:不保存文件并退出
vi
:
!command
:执行
shell
命令
command
:
n1,n2 w!command
:将文件中
n1
行至
n2
行的内容作为
command
的输入并执行之,若不指定
n1
,
n2
,则表示将整个文件内容作为
command
的输入
:
r!command
:将命令
command
的输出结果放到当前行
寄存器操作
“
?nyy
:将当前行及其下
n
行的内容保存到寄存器?中,其中
?
为一个字母,
n
为一个数字
“
?nyw
:将当前行及其下
n
个字保存到寄存器?中,其中
?
为一个字母,
n
为一个数字
“
?nyl
:将当前行及其下
n
个字符保存到寄存器?中,其中
?
为一个字母,
n
为一个数字
“
?p
:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd
:将当前行及其下共
n
行文本删除,并将所删内容放到
1
号删除寄存器中。
VI
常用技巧
VI
命令可以说是
Unix/Linux
世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。本文旨在介绍
VI
的一些最常用命令和高级应用技巧。
一、基本命令介绍
―
- 1
.光标命令
k
、
j
、
h
、
l
――上、下、左、右光标移动命令。虽然您可以在
Linux
中使用键盘右边的
4
个光标键,但是记住这
4
个命令还是非常有用的。这
4
个键正是右手在键盘上放置的基本位置。
nG
――跳转命令。
n
为行数,该命令立即使光标跳到指定行。
Ctrl+G
――光标所在位置的行数和列数报告。
w
、
b
――使光标向前或向后跳过一个单词。
―
- 2
.编辑命令
i
、
a
、
r
――在光标的前、后以及所在处插入字符命令
(i=insert
、
a=append
、
r=replace)
。
cw
、
dw
――改变
(
置换
)/
删除光标所在处的单词的命令
(c=change
、
d=delete)
。
x
、
d$
、
dd
――删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。
―
- 3
.查找命令
―
- /string
、
?string
――从光标所在处向后或向前查找相应的字符串的命令。
―
- 4
.拷贝复制命令
―
- yy
、
p
――拷贝一行到剪贴板或取出剪贴板中内容的命令。
二、常见问题及应用技巧
―
- 1
.在一个新文件中读
/etc/passwd
中的内容,取出用户名部分。
―
- vi file
―
- :r /etc/passwd
在打开的文件
file
中光标所在处读入
/etc/passwd
―
- :%s/:.*//g
删除
/etc/passwd
中用户名后面的从冒号开始直到行尾的所有部分。
―
-
您也可以在指定的行号后读入文件内容,例如使用命令“
:3r /etc/passwd
”从新文件的第
3
行开始读入
/etc/passwd
的所有内容。
―
-
我们还可以使用以下方法删掉文件中所有的空行及以
#
开始的注释行。
―
- #cat squid.conf.default | grep -v ^$ | grep -v ^#
―
- 2
.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。
―
- vi file
―
- :w /tmp/1
保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第
20
~
59
行之间的内容存盘成文件
/tmp/1
,我们可以键入如下命令。
―
- vi file
―
- :20,59w /tmp/1
―
- 3
.用
VI
编辑一个文件,但需要删除大段的内容。
―
-
首先利用编辑命令“
vi file
”打开文件,然后将光标移到需要删除的行处按
Ctrl+G
显示行号,再到结尾处再按
Ctrl+G
,显示文件结尾的行号。
―
- :23,1045d
假定
2
次得到的行号为
23
和
1045
,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用
ma
、
mb
命令标记,然后利用“
:a,bd
”命令删除。
―
- 4
.在整个文件的各行或某几行的行首或行尾加一些字符串。
―
- vi file
―
- :3,$s/^/some string /
在文件的第一行至最后一行的行首插入“
some string
”。
―
- :%s/$/some string/g
在整个文件每一行的行尾添加“
some string
”。
―
- :%s/string1/string2/g
在整个文件中替换“
string1
”成“
string2
”。
―
- :3,7s/string1/string2/
仅替换文件中的第
3
行到第
7
行中的“
string1
”成“
string2
”。
―
-
注意
:
其中
s
为
substitute
,
%
表示所有行,
g
表示
global
。
―
- 5
.同时编辑
2
个文件,拷贝一个文件中的文本并粘贴到另一个文件中。
―
- vi file1 file2
―
- yy
在文件
1
的光标处拷贝所在行
―
- :n
切换到文件
2 (n=next)
―
- p
在文件
2
的光标所在处粘贴所拷贝的行
―
- :n
切换回文件
1
―
- 6
.替换文件中的路径。
―
-
使用命令“
:%s#/usr/bin#/bin#g
”可以把文件中所有路径
/usr/bin
换成
/bin
。也可以使用命令“
:%s//usr/bin//bin/g
”实现,其中“”是转义字符,表明其后的“
/
”字符是具有实际意义的字符,不是分隔符。
##################################################################################
相关的命令
ls
列出文件,文件名
CP
文件的复制
RM
删除文件
RM -R
删除有文件的文件夹
MV
移动文件
MKDIR
创建目录
RMDIR
删除目录
PS
查看进程
PWD
查看当前目录
DU
查看磁盘情况
CD
改变目录
FIND
搜索文件系统
LOCATE
定位文件
chown
改变档案所属者
upset
设置系统
chnod
改变文件或目录的访问权限
eg. chmod +o test.c
常用的操作
1
、挂接网络
mount -t smbfs -o username=dgy,password=123456 //192.168.0.87/share /mnt/up
2
、查看磁盘的状态
fdisk -l
3
、挂接
U
盘
mount -t vfat /dev/sda1 /mnt/up
4
、更新安装包
apt -get install gcc-2.95
5
、压缩文件夹
压缩:
tar csf test.tgz test
解压缩
: tar {xzf|zxvf} test.tgz
二、命令行编辑快捷键
history
显示命令历史列表
↑
(Ctrl+p)
显示上一条命令
↓
(Ctrl+n)
显示下一条命令
!num
执行命令历史列表的第
num
条命令
!!
执行上一条命令
!?string?
执行含有
string
字符串的最新命令
Ctrl+r
然后输入若干字符,开始向上搜索包含该字符的命令,继续按
Ctrl+r
,搜索上一条匹配的命令
Ctrl+s
与
Ctrl+r
类似
,
只是正向检索
Alt+<
历史列表第一项
Alt+>
历史列表最后一项
Ctrl+f
光标向前移动一个字符
,
相当与
->
Ctrl+b
光标向后移动一个字符
,
相当与
<-
Alt+f
光标向前移动一个单词
Alt+b
光标向后移动一个单词
ls !$
执行命令
ls
,并以上一条命令的参数为其参数
Ctrl+a
移动到当前行的开头
Ctrl+e
移动到当前行的结尾
Esc+b
移动到当前单词的开头
Esc+f
移动到当前单词的结尾
Ctrl+l
清屏
Ctrl+u
剪切命令行中光标所在处之前的所有字符
(
不包括自身
)
Ctrl+k
剪切命令行中光标所在处之后的所有字符
(
包括自身
)
Ctrl+d
删除光标所在处字符
Ctrl+h
删除光标所在处前一个字符
Ctrl+y
粘贴刚才所删除的字符
Ctrl+w
剪切光标所在处之前的一个词
(
以空格、标点等为分隔符
)
Alt+d
剪切光标之后的词
Esc+w
删除光标所在处之前的字符至其单词尾
(
以空格、标点等为分隔符
)
Ctrl+t
颠倒光标所在处及其之前的字符位置,并将光标移动到下一个字符
Alt+t
交换当前与以前单词的位置
Alt+u
把当前词转化为大写
Alt+l
把当前词转化为小写
Alt+c
把当前词汇变成首字符大写
Ctrl+v
插入特殊字符
,
如
Ctrl+v+Tab
加入
Tab
字符键
Esc+t
颠倒光标所在处及其相邻单词的位置