vim编辑命令总结

1:: 这是Vi的命令执行界面(最后行方式命令 )
set number //显示行号

all:列出所有选项设置情况
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号

n:光标移至第n行首 (可以进行++++,------运算)

2:命令模式下

移动光标类命令

字符
h :光标左移一个字符
l :光标右移一个字符

k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行

w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾

0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

段落
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾

·屏幕

nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行

Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏

Ctrl+b;向文件首翻一屏
Ctrl+f:向文件尾翻一屏

特殊

Backspace:光标左移一个字符 (跨行)

Enter :光标下移一行

命令模式删除:

删除一行,执行两次d或一次D

删除一个字符,x

3:编辑模式下

i :光标前
I :行首
a:光标后
A:当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
 
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键(顺序替换多个)

s:从当前光标位置处开始,以输入的文本替代指定数目的字符   例如:2s替换两个字符
S:删除指定数目的行,并以所输入文本代替之                 例如:2S替换两行

(nCC:修改指定数目的行 和上面的功能类似)
ncw或nCW:修改指定数目的字 例如:2cw替换 两个组合字   中国人 和平 kk

删除命令

x或X:删除一个字符,x删除光标后的,而X删除光标前的
ndw或ndW:删除光标处开始及其后的n-1个字 《n为参数》
d0:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行 《多行删除功能》    和删除功能的差异

4:搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令

:s/p1/p2:将当前行中第一个p1均用p2替代
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

下面的命令把整个文件中的old的每次出现都改为new:
:1, $s / old / new / g
我们知道%等价于1,$,所以上行命令也可以这样写:
:% s / old / new / g

确认替换
使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法
在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:
:1, 30 s /old/new/ gc
将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)? 
y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。


上下文相关替换
除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。
语法格式如下:
:g /pattern/s/old/new/g    将会把包含pattern的行中,把所有old替换为new
第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。
如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:
:g/string/s//new/g  等价于  :g/string/s/string/new/g
还要注意:
:g/string/s//new/g  也等价于 :% s/string/new/g

5:文件操作命令

vi filename 打开一个文件,所涉及到的模式open  edit recover quit abort
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑

:w :保存当前文件
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi

:e filename:打开文件filename进行编辑 《在当前模式下 还可以继续打开其他的文件 》

:   e ! 重新编辑当前文件,忽略所有的修改

:n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m m3 将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d 将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename 将 n1 行到 n2 行之间的内容保存到文件 filename 中
:nr <文件> 把<文件>插入到第n行
:so <文件> 读取<文件>,再执行文件里面的命令(文件中的命令应该都是一些ex命令)
:w >> <文件> 添加到<文件>末尾. 也可以使用行号

:n1,n2 w ! Command 将文件中n1行到n2行的内容作为 Command的输入并执行之,
若不指定 n1、n2,则将整个文件内容作为 Command 的输入。
:r ! Command 将命令 Command 的输出结果放到当前行。
:! command:执行shell命令command

6:寄存器操作

传统软件的复制(copy),剪切(cut),粘贴(paste),在Vim中对应的是yank,delete和put。
在Vim中的复制,删除,替换等操作的临时内容,都会存储在寄存器中。
无名寄存器("") 复制专用寄存器("0) 删除专用寄存器("1-"9) 命名寄存器("a-"z) 黑洞寄存器("_d) +操作系统的剪贴板

:reg 显示所有当前的registers
yy  将当前行复制到缓冲区
yw  将当前单词复制到缓冲区
y1  将光标处的一个字符复制到缓冲区
p   将缓冲区的信息粘贴到光标的后面
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
例如:ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

7:多个文件操作

在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件;
vim已经启动:open file  :e file
同时显示多个文件: :split :vsplit
在文件之间切换: 文件间切换 Ctrl+6—下一个文件 :bn—下一个文件 :bp—上一个文件
在窗格间切换的方法 Ctrl+w+方向键——切换到前/下/上/后一个窗格 Ctrl+w+h/j/k/l ——同上 Ctrl+ww——依次向后切换到下一个窗格中

在多个个文件之间复制:
1. 在第一个文件中使用可视模式,就是VISUAL,然后选中要复制的文本,执行命令 "+y,或者“*y这就把内容复制到剪贴板。这里可以三个字符,而且一定要在可视化模式中,并存选中你要复制的代码以后,输入上面的命令,这时在VIM中 的下面并不显示你输入的这条命令。
2.在另一个文件中,执行命令"+p,或者"*p。就能复制过来,+指的是寄存器的意思,似乎也是操作系统的剪贴板,复制了之后,在别的地方,例如文本文件里就可以用ctrl+v了。这里也是在可视模式下,不需要输入冒号:,这里输入的命令也是看不到的。

猜你喜欢

转载自yuebishuhui-sina-com.iteye.com/blog/2220577