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 系统命令删除文件。
【待补充】
浙公网安备 33010602011771号