Morole

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、vi 和 vim 的区别

1.1 vi有3个模式:

命令模式(Command mode),同vim中的默认模式
插入模式(Insert mode),
底行模式(Last line mode),同vim中的命令模式

1.2 vim里面有6种模式:

默认模式(Normal mode),
插入模式(Insert mode),
命令模式(Command line mode),
选择模式(Select mode),
视图模式(Visual mode),像拿鼠标进行操作
Ex模式(Ex mode),类似命令模式,可以一次执行多条命令,使用:visual命令退出Ex模式

1.3 vim 相比 vi 的优势

a. 多级撤消
我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。

b. 易用性

vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。

c. 语法加亮
vim可以用不同的颜色来加亮你的代码。

d. 可视化操作
就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

e. 对vi的完全兼容
某些情况下,你可以把vim当成vi来使用。

vi和vim都是Linux中的编辑器,不同的是vim比较高级,可以视为vi的升级版本。vi使用于文本编辑,但是vim更适用于coding。

 

2. Vim文件操作

2.1 打开/新建文件:

vim file 打开文件,如文件不存在则新建

vim file +XX 打开文件,光标至第XX行开始

vim path/file 打开目录下的文件,文件不存在则新建;若目录不存在编辑完也不能保存

vim -R file 只读方式打开file文件,如果有权限,则可强制保存

vim -c [/命令] file 加载file文件后执行命令


2.2 同时编辑多个文件:

vim [file1] [file2]…… 同时编辑多个文件
此时:
:ar 查看当前编辑的文件名??
:n 切换当前编辑的文件???
:e filename 切换到filename的文件???
:w 读取已存在的文件并将其内容放入正在编辑的文件中??
:w n m filename 将当前文件n到m行的内容放入filename文件中,若已存在则覆盖???

 

3. 默认模式(Normail Mode):

 

3.1 光标移动:


h 光标左移一个字符(行内)

l 光标右移一个字符(行内)


^ 或 0 或 [Home] 光标移至行首

$ 或 [End] 光标移至行尾

A 光标移至尾行,并进入编辑模式


<space> 光标向后移一个字符(文档内)

n<space> 光标向后移动n个字符(文档内)


k 光标上移一行

j 或 [Enter] 光标下移一行


b 或 B 光标至上个单词首字母

w 或 W 光标至下个单词首字母

e 或 E 光标至下个单词的尾字母处


{ 光标至段落前一行

} 光标至段落后一行


H 光标至屏幕首行

L 光标至屏幕尾行

M 光标至屏幕中央那一行


gg 光标至文档首行

G 光标至文档尾行

nG 光标至文档第n行

Ctrl+g 列出光标所在行的行号


[[ 光标至文档首行

]] 光标至文档尾行


Ctrl+f 或 [PageDn] 屏幕 向下 移动一页(将光标下移至文件尾,通常每次移动24行)

Ctrl+b 或 [PageUp] 屏幕 向上 移动一页(将光标上移至文件头,通常每次移动24行)

Ctrl+d 屏幕 向下 移动半页(向下移动到文件尾?通常每次移动12行??)

Ctrl+u 屏幕 向上 移动半页(向上移动到文件头?通常每次移动12行??)

+ 光标移动到非空格符的下一行

+n 向上跳n行

- 光标移动到非空格符的上一行

n- 向下跳n行

 

3.2 文档操作:

 

删除:

x 或 [Del] 删除光标后一个字符

X 或 [Backspace] 删除光标前一个字符

dd 删除光标所在行

ndd 删除光标所在行开始的n行

dj 删除光标后两行,等于2dd ????

d0 或 d^ 删除光标到行首的所有字符

d$ 或 D 删除光标到行尾的所有字符,不换行

nd$ 或 nD 删除光标处开始的n行,光标不换行

d1G 删除光标到第一行的所有数据

dG 删除光标到最后一行的所有数据

d[方向键] 删除文字???

复制:

yy 复制光标所在行

nyy 复制光标所在行向下的n行

yw 复制从光标开始到词尾的字符

nyw 复制从光标开始的n个单词

y1G 复制光标所在行到第一行的所有数据

yG 复制光标所在行到最后一行的所有数据

y0 或 y^ 复制光标处到行首的所有字符

y$ 复制光标处到行尾的所有字符

粘贴:

p 粘贴到光标的下一行(新建行)(小写p),如果使用了自定义缓冲区,建议使用"ap 进行粘贴。

pp 整行复制???

P 粘贴到光标处(大写P)??????光标所在行上一行,还是光标处字符后??,如果使用了自定义缓冲区,建议使用"aP 进行粘贴。

J 将光标所在行与下一行的数据结合成同一行????

重复操作:

c 重复删除多个数据

ncj 向下删除n行
nch 向前删除n个字符
nce 向后删除n个单词??????

撤销:

u 撤销最近的操作

U 撤销对当前行上的所有操作

Ctrl + r 重做刚撤销的命令

. 小数点,重复前一个动作

 

 

4. 编辑模式(Insert-mode)

编辑模式分两种:一种是输入模式(--INSERT--),一种是取代模式(--REPLACE--)

 

4.1 从命令模式进入(--INSERT--):

a 从光标后一个字符处进入

A 从光标所在行尾进入

i 光标所在的字符处进入

I 光标所在行首进入???还是从所在行的第一个非空格字符处开始输入

o 在光标所在行之后另起一行进入

O 在光标所在行之前另起一行进入

s 删除光标所在的字符并进入

S 删除光标所在行进入

 

4.2 从命令模式进入(--REPLACE--):

r 替换光标位置上的一个字符(进入取代模式(--REPLACE--))

R 替换从光标位置开始的字符(--REPLACE--),直到按下ESC


Esc 退出编辑模式,返回默认模式

 

5. 命令模式(Command-mode):


用于执行命令,如:保存文件,搜索,替换,退出等。

进入:

: 进入命令模式

Q 进入命令模式

保存/退出:
:w 保存

:w [filename] 将文件另存为

:w! 若文件属性为“只读”时,强制写入,若当前用户对文件没有写入权限也会失败

:q 退出vi,当文档有修改且没有保存时,会提示保存

:q! 强制退出,放弃保存

:wq 保存并退出

:wq! 强制保存后退出

:! 强制退出,提示保存???

ZZ 保存退出

ZQ 不保存退出

:exit 退出

:x 保存并退出

:X 文档加密,删除密码直接设空即可


:r [filename] 将filename这个文档的内容加到光标所在行后面???所在行后还是光标后??

:n1,n2 w [filename] 将 n1 到 n2 的内容保存为filename文件

:! command 暂时离开vi到指令模式下执行command的显示结果

 

搜索:

/old 从光标处向下寻找名为old的字符串

?old 从光标处向上寻找名为old的字符串

n 字母按键n,重复前一个搜索的动作(即搜索下一个字符串)

N 字母按键N,与n相反,反向搜索上一个字符串


替换:

:n1,n2s/old/new/g

:1,$s/old/new/g

:1,$s/old/new/gc

:s/old/new 用new替换行中首次出现的old

:s/old/new/g 用new替换行中所有的old

:n,m s/old/new/g 用new替换从n到m行里所有的old

:%s/old/new/g 用new替换当前文件里所有的old


利用/或?+输入+n+.+n+.+……可以实现批量替换??????

 

6. 可视模式(Visual-mode):

vv 进入可视模式

V 进入可视模式

Ctrl+v 进入可视模式

 

7. 缓冲区的使用:

数字编号缓冲区:

:np 或 :nP n为缓冲区号1-9,

字母编号缓冲区:

:+x+命令 x为缓冲区名(小写字母a-z),将命令执行的内容保存到缓冲区
例如:
"wdd 删除当前行,副本保存在缓冲区w
"wp 将缓冲区w的内容复制到光标位置

"z7yy 复制7行到缓冲区z
"zp 将缓冲区z的内容复制到光标位置

 



8. Vim设置选项(Set,缩写,宏操作)

 

8.1 Set

 

:set 只显示修改过的选项

:set all 显示所有选项

:set X? 显示选项X的值


布尔式选项:

:set X 选定

:set noX 禁止


数字式选项:

set X=12 ???

串选项:

set X=strA ???


其他选项(括号内为缩写):

autoindent(ai) 将新行与前一行的行首对齐

ignorecase(ic) 在搜索选项中忽略大小写

shiftwidth(sw) 设置缩进的空格数,与autoindent选项一起使用

wrapmargin(wm) 设置有边界为制定的字符数

report ????

number(nu) 显示行号
:set nu 或 set number 显示行号
:set nonu 或 set nonumber 关闭行号


:set file=unix 将文件file修改为unix格式,windows下面的文件在linux下会出现^M

 

8.2 缩写:

:ab uno UNIX Operation System 将uno设置为UNIX Operation System的缩写,输入uno加一个空格会自动替换

:unab uno 取消uno缩写

 

8.3 宏操作:

:map [宏名] [操作功能键序列] 宏时临时的,只在当前编辑会话中起作用

 

以上Vim设置都是临时的,只对当前文件生效,若希望每次打开vim都使用一些设置,应在工作目录下创建一个.vimrc.exec文件,在里面保存希望每次使用的设置,如:
set nu
set report=0
ab uop UNIX Operation System
map q 5dd
保存以上文件内容,即每次打开vim将会使用行号

 

 

9. 其他命令

:!+命令 运行shell命令,如::!date
:J 行链接,

nohl 取消高亮

 

`
~


@
#
%
^
&
*
(
)

_

=

 

 


n[命令] n>0,将命令执行n次,上面已有实例。

 

 

 

10. 文件的恢复与暂存盘

vi具有“可恢复”的功能。vi凭借什么进行恢复呢?很简单,临时文件。举例来说,当我们编辑一个文件时,假设名称为 /tmp/ passwd,那么在这个 /tmp中就会有一个临时文件,文件名为“/tmp/.passwd.swp”,这是一个隐藏文件,我们所进行的一些修改,都会暂时存在该文件中。如果在文件修改过程中,系统死机,那么下次再重新vi /tmp/passwd时,系统就会告诉你,是否需要恢复(recovery)成修改过程中的模样?如果按下 (R),就可以将数据恢复到修改过程的样子,而不是源文件。这是个很有用的功能。
也就是说,如果有一天,在 /tmp中执行ls -al时,发现有两个文件,文件名分别为passwd与 .passwd.swp,那么,(1) 可能有人在编辑这个文件;(2) 之前你在编辑这个文件时,因为某些未知因素导致vi程序中断,则该临时文件就会存在。如果是状态 (2),则此时可以将该 .passwd.swp文件删除,或者直接vi /tmp/passwd,在vi询问是否恢复时,选择恢复,然后存储更新 /tmp/passwd,之后再将这个 /tmp/.passwd.swp文件删除即可。如果不删除的话,那么每次编辑这个文件时,都会告诉你该文件有问题。

 

 

11. vim中常见问题处理

 

a. 出现错误:E325:ATTENTION

原因:

①多个终端打开同一个文件

②文件编辑时出现奔溃,生成了一个.swp交换文件

解决方案:

①关闭其他终端打开的文件

②删除.swp文件,按提示按D删除文件 或 rm -f .file.swp 系统命令删除文件。

 

 

【待补充】

 

posted on 2018-11-15 19:52  Morole  阅读(284)  评论(0)    收藏  举报