分类: LINUX
2012-03-27 12:21:02
启动vi(vim)
vi/vim filename:从filename第一行开始编辑,即光标默认停留在文件第一行第一个字符处;
+n filename:从第n行开始编辑;
+ filename:从最后一行开始编辑;
+/pattern filename:从第一个包含字符串“pattern”的行开始编辑。
-r filename:在系统崩溃后恢复filename;
-R filename:以只读方式编辑filename,等同于命令view filename。
vi的三种工作模式:命令模式(也称普通模式)、插入模式与末行模式(命令模式下输入:后进入)。
命令模式下的命令:
i:在当前光标插入文本;
I:在所在行行首插入文本;
a:在当前光标后添加文本;
A:在当前行尾添加文本;
k、方向键上:光标上移;
j、方向键下:光标下移;
-:光标到上一行的行首;
+:光标到下一行的行首;
h、Backspace、方向键左:光标左移;
l、Space、方向键右:光标右移;
0、^:光标到行首;
$:光标到行尾;
w:光标移到下一单词,标点符号视为单独一个单词;
W:与w相似,标点符号视为单词的一部分,以空格为分隔;
b:光标移到上一个单词;
B:与b相似,只以空格为间隔,无视标点符号;
e:光标移到当前单词末;
E:与e相似,无视标点符号;
(:光标移到上一个句子的开始;
):光标移到下一个句子的开始;
{:光标移到上一段落的开始;
}:光标移到下一段落的开始;
H:光标移到屏幕顶部第一行的最左端;
M:光标移到屏幕中间;
L:光标移到屏幕的尾部。
x、dl:删除当前字符;
X:删除当前光标左侧字符;
d0:从行的开始处删除;
D、d$:删除到行的末尾;
d^:从行开始的第1个字符开始删除(不包括空格和TAB);
dw:删除到单词的末尾;
d5w:删除到第5个单词的末尾;
dtc:删除到当前行字符c的下一次出现;
dfc:删除到当前行字符c的下一次出现(包括c);
d/word:删除到单词word的下一次出现;
d3{:从前面的第3段删除到当前位置;
d{:从本段的开始位置删除到当前位置;
db:从单词的开始处删除;
dW:删除到以空白为分隔的单词的末尾;
dB:从以空白为分隔的单词的首字符开始删除;
d5B:从以空白为分隔的前面第5个单词的首字符开始删除;
d):删除到句子的末尾;
d4):删除到第4个句子的末尾;
d}:删除到段落末尾;
d4}:删除到后面的第4段末尾;
dd:删除一行;
3dd:删除当前行开始的3行;
dL:删除到当前屏幕的最后一行(包括最后一行);
dH:从当前屏幕的第一行开始删除。
C:删除到行的末尾,并进入插入模式。
cxx:删除指定的内容并进入插入模式。xx后缀与d命令的后缀相同。
~:更改大小写;
3~:从当前字符开始更改3个字符的大小写;
s:用一个或多个字符替换当前光标位置处的字符;
S:用一个或多个字符替换当前行;
10s:用一个或多个字符替换当前字符开始的10个字符;
J:把当前行的末尾与下一行连接起来并以一个空格分隔,如果当前行以句点“.”结尾,则两行之间插入两个空格;
.:句点命令,重复执行最近一次的修改命令。
u:撤销上一次的编辑操作;
U:撤销对当前行的所有修改,将文本恢复到启动修改之前的状态
Ctrl+R:重复命令,即redo。
f:从当前光标开始查找指定的字符,并将光标移动到该字符出现的位置,可以d、c合用;
3fq:光标移到本行第三个字符q所在位置;
F:从本行开始位置到当前光标所在位置之间查找字符。
行号+G:定位到指定的行,若不指定行号,则默认定位到最后一行。
y:复制到通用缓冲区,与移动命令合用,如y2l,与d、c后缀相同。yy复制一行,3yy复制3行;
Y:等同于yy。
p:把通用缓冲区的内容粘贴到当前位置,删除命令或复制命令都会把文本存入通用缓冲区中;
P:把通用缓冲区的内容粘贴到当前字符之前。
Ctrl+G:显示文件状态。
ZZ:保存并退出。
/+字符串:查找字符串;
n:向后重复上一次搜索;
N:向前重复上次搜索。
Ctrl+w+s:水平拆分窗口;
Ctrl+w+n:打开新窗口编辑一个空文件;
Ctrl+w+w:实现在多个窗口之间的切换。
Ctrl+L:重绘屏幕。
Ctrl+y:向上滚一行;
Ctrl+e:向下滚一行;
Ctrl+u:向上滚动半屏;
Ctrl+d:向下滚动半屏;
Ctrl+b:向上滚动整屏;
Ctrl+f:向下滚动整屏。
末行模式下的命令
: [address] r [filename]:把文件内容插入到当前缓冲区,address可以是行号,未指定行号时默认插入到当前光标所在行的下方,未指定文件名时默认再次读入当前文件;
: [address] w [filename]:把缓冲区的部分或全部内容写入到磁盘,例::3,8 w temp把3~8行的内容写加到temp文件里。:4,10 w >> temp把4~10行内容追加到temp文件里;
:f:显示文件状态,等同于命令模式下的Ctrl+G。
:undo:撤消命令,等同于命令模式下的u;
:redo:重复命令,等同于命令模式下的Ctrl+R。
:w:保存缓冲区的内容,但不退出;
:w filename:另存为;
:q:退出;
:wq:保存并退出;
:q!:不保存而退出。
:set noincsearch:设置普通查找,当输入/+字符串并按回车键开始查找;
:set incsearch:设置增量查找,每输入一个字符vi便高亮显示匹配的位置。
:[g] [address] s/search/replacement [/option]:替换字符串。g表示对所有匹配结果进行替换,否则只对第一次查找结果进行替换。address表示查找的范围,不指定则只搜索当前行。
:split:窗口水平拆分,可以多次拆分;
:split filename:水平拆分窗口,并在新窗口中载入指定文件;
:vsplit:窗口垂直拆分;
:vsplit filename:垂直拆分窗口,并载入指定文件。
:only:关闭除当前窗口之外的窗口;
:q:关闭当前窗口;
:qall:关闭所有窗口。
:sh:启动一个Shell,在该Shell里输入exit或Ctrl+d退出Shell回到vi;
:!command:执行外部命令。
:'标记:字符“'”,标记当前行,例::'t把该行标记成t;(博主用该命令时得到错误“E20 没有设定标记”。)
:`标记:字符“`”,使用标记,例如标记t存在时,命令:d't删除该行。
:help:获得帮助。