Saturday, 23. September 2006, 15:28:15
vi, Vim
光标移动
左:h
下:j
上:k
右:l
下一行行首:+
上一行行首:-
当前行行首:
当前行行尾:$
后一个单词词首:w,W
后一个单词词尾:e,E
前一个单词词首:b,B
下一屏:CRTL+F
上一屏:CRTL+B
下半屏:CRTL+D
上半屏:CRTL+U
文件尾:G
当前屏幕首行:H
当前屏幕末行:L
当前屏幕中央:M
指定行:行号G,:行号
指定字符串前:/字符串,?字符串
当前行指定字符前:f字符,F字符
文字追加和插入
当前光标右方追加:a
当前光标行尾追加:A
当前光标左方追加:i
当前光标行首追加:I
当前行下方追加行:o
当前行上方插入行:O
文字删除
删除光标位置文字:x
删除光标左方文字:X
删除当前行:dd
删除光标移动范围内的文字:d光标移动命令
文字替换
替换1文字到多文字:s
替换1文字到1文字:r
替换到当前行尾:C
替换当前行:cc
从当前位置开始替换直到输入ESC:R
文字复制和粘贴
(例)
复制光标以下3行:3yy,3Y
复制光标以后6个单词:6yw
粘贴到光标以下:p
粘贴到光标以上:P
通用替换命令
:行1,行2s/字符串1/字符串2/g
“行1,行2”指定方法例:
第5行到第30行:5,30
当前行到第30行:.,30
第5行到第末尾行:5,$
第5行到含有end的行:5,/end/
所有行:%
其他常用命令
显示行号
:set number 或者 :set nu
隐藏行号
:set nonumber 或者 :set nonu
自动缩进
:set autoindent 或者 :set ai
不自动缩进
:set noautoindent 或者 :set noai
显示Tab及行尾字符
:set list
隐藏Tab及行尾字符
:set nolist
设置Tab宽度为4个字符
:set tabstop=4
查看当前设置
:set all
Friday, 1. September 2006, 04:48:22
vi, Editor
本文转载自
ChinaUnixvi全屏幕编辑器vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):
command方式: 任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入都引起立即反映
insert方式: 任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,insert方式下按ESC,可跳回command方式。
escape方式:以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。
进入vi(在系统提示符下面输入以下指令):vi 进入vi而不读入任何文件
vi filename 进入vi并读入指定名称的文件(新、旧文件均可)。
vi +n filename 进入vi并且由文件的第几行开始。
vi +filename 进入vi并且由文件的最后一行开始。
vi + /word filename 进入vi并且由文件的word这个字开始。
vi filename(s) 进入vi并且将各指定文件列入名单内,第一个文件先读入。
vedit 进入vi并且在输入方式时会在状态行显示“INSERT MODE"。
编辑数个文件(利用vi filename(s))进入vi后):args 显示编辑名单中的各个文件名
:n 读入编辑名单中的下一个文件
:rew 读入编辑名单中的第一个文件
:e# 读入编辑名单内的前一个文件
:e file 读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则应先以: w 存档。
:e! file 强迫读入另一个文件进入vi,原文件不作存档动作。
存储及退出vi:w filename 存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。
:wq 或者
zz 存文件,并且退出vi.
:q 不作任何修改并退出vi。
:q! 放弃任何修改并退出vi。
:!command 暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh 暂时退出vi到系统下,结束时按Ctrl + d则回到vi。
加数据指令i 在关标位置开始插入字符,结束时候按ESC键。
I 在光标所在行的最前面开始加字,结束时按ESC键。
a 在光标位置后开始加字,结束时按ESC键。
A 在光标所在行的最后面开始加字,结束时按ESC键。
o 在光标下加一空白行并开始加字,结束时按ESC键。
O 在光标上加一空白行并开始加字,结束时按ESC键。
!command 执行shell指令,并把结果加在光标所在行的下一行。
删除指令nx 删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
nX 删除由光标位置起始的n个字符(不含光标位置)。
ndw 删除光标位置其实的n个字符组(word)。
d0 将行的开始到光标位置的字符全部删除。
d$ 或
D 将光标位置起始到行尾的字符全部删除。
ndd 将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd 删除文件的第start到end行。
关标移动 移到一行的开始
$ 移到一行的最后
[ 移到文件开始位置
] 移到文件结束位置
nh 往左移n位
nl 或者
n空格 往右移n位
nk 向上移n行
n+ 向上移n行,光标在该行的起始
ni 向下移n行
n- 向下移n行,光标在该行的起始
H 移到屏幕的左上角
M 移到屏幕的中间行开头
L 移到屏幕的最后一行
G 移到文件的最后一行
nG或者
:n 移到文件的第n行
nw 右移n个字组,标点符号属于字组
nW 右移n个字组,标点符号不属于字组
nb 左移n个字组,标点符号属于字组
nB 左移n个字组,标点符号不属于字组
Ctrl + u 屏幕上卷半个菜单
Ctrl + d 屏幕下卷半个菜单
Ctrl + b 屏幕上卷一个菜单
Ctrl + F 屏幕下卷一个菜单
修改指令r 修改光标文件的字符
R 从光标位置开始修改,结束时按ESC键
new 更改n组字符,结束时按ESC键
ncc 从光标所在位置开始更改n行,结束时按ESC键
重排各行长度i 并按Enter将该行由光标所在处断开,并进入insert方式
J 把下一行的数据连接到本行之后
寻找指令/text 从光标位置往下找字串text
?text 从光标位置往上找字串text
n 继续找下一个字串(在输入上面的寻找指令之后使用)
寻找并且取代指令:%s/text1/text2/options 将各行的text1替换为text2
option=g表示文件中所有的text1均被取代,若未输入任何option,则只有 各行中的第一个出现的text1被取代
option=go 在屏幕显示各取代的行
option=gc 在每个字串取代之前要求确认
Start,endgtext1/s/ / text2/options 同上,只寻找并取代第start~end行。
或:
Start,ends/text1/text2/options复制及移动文件:first,last co dest 将first 到last行的数据复制到目标行(dest)下面
:Start,end m dest 将start 到 end行的数据移动到目标行(dest)下。
:r filename 将指定文件的内容读入光标所在行下。
nY 将光标所在位置开始的n行数据暂存
p 复制暂存数据在光标的下一行
P 复制暂存数据在光标的上一行
其他命令. 重复前一指令
u 取消前一指令
Ctrl + l 刷新屏幕显示
:set number 显示文件的行号,但不会存文件
:set nonumber 解除行号显示
:set ai 设置每行起始位置(以光标当前位置为起始)
:set noai 取消行起始位置设定
:f 或
<Ctrl> + g 告诉用户有关现行编辑文件的数据。