您的位置:首页 > 其它

VI常用命令

2013-05-18 20:47 211 查看
从网上搜到的一些常用操作,花了半天整理了一下,感觉除了指定范围的拷贝还没有找到,其他的操作的确比用鼠标方便多了!

*************************************************

vi常用命令

*************************************************

+++++++++++++++++++++++++++++++++++++++++++++++++

view模式

信息查看

:set nu 显示行号

:set nonu 隐藏行号

ctrl+g 查看光标位置

光标移动(前面加上数字可以控制移动间隔)

j 向下移动

k 向上移动

l 向后移动

h 向前移动

$ 移动到行尾

^ 移动到行首

单词移动(前面加上数字可以控制移动间隔)

w 向后移动一个单词

b 向前移动一个单词

行移动

nG 移动到第n行

G 移动到最后

页移动

ctrl+f 向下翻页(front)

ctrl+b 向上翻页(back)

+++++++++++++++++++++++++++++++++++++++++++++++++

编辑模式

插入

i 光标前插入(insert)

a 光标后插入(append)

r 光标上方插入(replace)

s 删除插入(substitute)

删除(第一个字母d表示delete,第二个字母表示操作对象)

x 删除一个字符

dw 删除一个单词

d$ 删除光标到行尾的所有字符

dd 删除整行(中间加数字指示向后删除多少行)

复制(第一个字母y表示yank,第二个字母表示操作对象)

yw 复制单词(中间加数字指示向后复制多少个单词)

yy 复制整行(中间加数字指示向后复制多少行)

粘贴

p 粘贴在光标下行

P 粘贴在光标上行

历史操作

u undo

ctrl+r redo

+++++++++++++++++++++++++++++++++++++++++++++++++

命令模式

/word 向前搜索word

?word 向后搜索word

:1,$s/word1/word2/g 从第一行到最后一行进行替换

:n1,n2s/word1/word2/g 从n1行到n2行进行替换

:n1,n2s/word1/word2/gc 从n1行到n2行进行逐个替换

:w 保存

:w! 强制保存

:q 退出

:q! 强制退出

:wq 保存退出

:w filename 另存为

其他

1) 在一个新文件中读/etc/passwd中的内容,取出用户名部分

vi file

:r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd

:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分

:3r /etc/passwd 这是在指定的行号后面读入文件内容

另外一种方法删掉文件中所有的空行及以#开始的注释行

#cat squid.conf.default | grep -v '^$' | grep -v '^#'

2) 在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘

vi file

:w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存到/tmp/1

:20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/1

3) 用VI编辑一个文件,但需要删除大段大段的内容

vi file

Ctrl+G 把光标移到需要删除的行的处按ctrl+G显示行号,再到结尾处再按Ctrl+G.

:23,1045d 假定两次行号为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/ 仅替换文件中的第三到七行中的string1成string2

Note: s为substitute,%表示所有行,g表示global

5) 同时编辑两个文件,在两个文件中拷贝剪贴文本

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 在'/'前用\符号指出'/'是真的单个字符'/'

7) 用 vi 多行注释

如果要给多行程序作注释,一个笨办法就是 插入 # ,然后用 j 跳到下一行用 . 命令, 重复上个命令。如果要注释几百行,这样的方法恐怕太愚蠢了。一个聪明的办法是:

:.,+499 s/^/#/g

若需全文的行首插入可用以下命令

:%s/^/#/g
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: