vim编辑器总结
目录
一 vi/vim 使用
-
vi/vim 工作模式
vim 的三种工作模式 普通模式 编辑模式 末行模式
1.1 打开文件
命令 |
功能 |
vim +n filename |
打开文件,并将光标置于第N行的行首 |
vim + filename |
打开文件,并将光标置于最后一行行首 |
vim +/pattem filename |
打开文件,并将光标置于第一个与patten匹配的行 |
vim –r filename |
上次使用vim编辑器时发生系统崩溃,打开其交换文件 |
vim filename |
打开文件,默认光标置于文件的第一个字母 |
2 普通模式
2.1 读文件
打开文件后,vim 进入的模式被称为普通模式,在这个模式中,可以使用键盘上的上、下、左、右方向键或其他键来移动光标。
移动光标参数:
操作 |
功能 |
h或 向左方向键 |
光标向左移动一个字符 |
j 或 向下方向键 |
光标向下移动一个字符 |
K 或 向上方向键 |
光标向上移动一个字符 |
L或 向右方向键 |
光标向右移动一个字符 |
Crtl+f |
屏幕向下移动一页 |
Ctrl+b |
屏幕向上移动一页 |
Ctrl+d |
屏幕向下移动半页 |
Ctrl+u |
屏幕向上移动半页 |
+ |
光标移动非空格符的下一列 |
- |
光标移动非空格符的上一列 |
n<space> |
光标会向右移动这一行的n个字符 |
0或功能键Home |
移动到这一行的最前面字符处 |
$或功能键End |
移动到这一行的最后面字符处 |
H |
光标移动到屏幕最上方那一行的第一个字幕 |
M |
光标移动到屏幕中间那一行的第一个字幕 |
L |
光标移动到屏幕最下方那一行的第一个字幕 |
G |
光标移动到这个文档的最后一行 |
nG |
光标移动到这个文档的第N行 |
gg |
光标移动到这个文档的第一行,相当于1G |
n<Enter> |
光标向下移动N行 |
3 编辑模式
进入到编辑模式
操作 |
功能 |
i,I |
进入到编辑模式,i表示从当前行编辑,I表示从当前所在行的第一个非空格字符开始编辑 |
a,A |
进入编辑模式,a表示从当前光标所在位置的下一个字符开始编辑,A表示从当前所在行的最后一个字符开始编辑 |
o,O |
进入编辑模式,o表示从当前光标下一行进行编辑,O表示在目前光标所在行的上一行编辑新的一行 |
r,R |
进入编辑模式,r表示只会取代光标所在的那一个字符一次,R表示会一直取代光标所在的文字,直到按下Esc键为止 |
删除、复制 粘贴(普通模式中实现)
操作 |
功能 |
x,X |
在一行文字中,x为向后删除一个字符,X向前删除一个字符 |
nx |
n为数字,连续向后删除n个字符 |
dd |
删除光标所在的那一行 |
ndd |
n为数字,删除光标所在行的向下n行 |
d1G |
删除光标所在行到到第一行的所有数据 |
dG |
删除光标所在行到最后一行的所有数据 |
d$ |
删除光标所在字符位置之后的该行的所有字符 |
d0 |
0为数字,删除光标所在字符位置之前的该行的所有字符 |
yy |
复制光标所在的那一行 |
nyy |
n为数字,复制光标所在行的向下N行 |
y1G |
复制光标所在行到第一行的所有数据 |
yG |
复制光标所在行到最后一行的所有数据 |
y0 |
复制光标所在那个字符到该行行首的所有数据 |
y$ |
复制光标所在那个字符到该行行尾的所有数据 |
p,P |
p将复制的数据粘贴到光标的下一行,P将复制的数据粘贴到上一行 |
J |
将光标所在行与下一行的文字结合同一行 |
c |
删除当前行并转成编辑模式 |
u |
撤销上次操作 |
Ctrl+r |
重做上次操作 |
4 末行模式
编辑完文件,需要对文件进行保存或退出时,需要按Esc键回到普通模式,在末行输入wq即可保存退出
末行参数
操作 |
功能 |
:w |
将编辑内容写入磁盘 |
:w! |
强制写入 |
:q |
退出vim |
:q! |
强制退出 |
:wq |
保存退出 |
:wq! |
保存强制退出 |
ZZ |
若文件未修改,则退出,若文件已修改,则保存退出 |
:w[filename] |
将编辑的文件存到filename 这个文件中 |
:r[filename] |
将编辑的文件中读入另一个文档的内容 |
:n1,n2w[filename] |
将n1行到n2行的内容写到filename这个文件中 |
:!command |
暂时退出vim到命令行下,执行command的显示结果 |
5 vim中的查找和替换命令
在普通模式中输入”:” 、“/”、 “?”这三个字符中的任何一个都可以将光标移动到屏幕的最底下一行,即末行模式,在模式中可以进行查找 替换。
查找替换命令
操作 |
功能 |
/word |
向光标之下寻找一个名为word的字符串 |
?word |
向光标之上寻找一个名为word的字符串 |
n |
重复进行前一个搜寻动作 |
N |
反向进行前一个搜寻动作(向上查找) |
:n1,n2s/word1/word2/g |
n1与n2为数字,在第n1到n2行之间寻找word1这个字符串,并用word2取代该字符串 :1,100s/3308/3307/g 表示从1到100行替换3308为3307 |
:n1,$s/word1/word2/g |
从第一行到最后一行寻找word1字符串,并用word2取代该字符串 |
:1,$s/word1/word2/gc |
从第一行到最后一行寻找word1字符串,并用word2取代该字符串,并且在取代前显示提示字符以供使用者确认 |
noh |
取消查找到内容后的高亮显示 |
:%s#3307#3309#g |
全局替换 |
6 vim环境设置
vim在使用中,设置环境也是一个重要的环节,在末行模式使用相关命令可以这是相关的环境
设置环境命令参数
操作 |
功能 |
:set nu |
设置行号 |
:set nonu |
取消行号 |
:set hlsearch |
将搜寻的字符串高亮显示,hlsearch是默认值 |
: set nohlsearch |
将搜寻的字符串不高亮显示 |
:set autoindent |
设置自动缩排 |
:set noautoindent |
取消自动缩排 |
:set backup |
设置自动备份,默认是nobackup,如果设置成backup,那么当更改文件时源文件会被另存成一个名为filename文件 |
:set nobackup |
取消自动备份文档 |
:set ruler |
在屏幕右下角显示状态行 |
:set noruler |
不在屏幕右下角显示状态行 |
:set showmode |
显示左下角的状态行 |
:set noshowmode |
不现实左下角的状态行 |
:set backspace=(012) |
在编辑模式下,设置退格键的功能,backspace为2时,可以删除任意值,为0或1时,仅删除刚刚输入的字符,而无法删除原本就已经存在的字符 |
:set all |
显示目前所有的环境参数设置值 |
:set |
显示与系统默认值不同的设置参数 |
:syntax on |
设置文档依据程序相关语法显示不同的颜色 |
:syntax off |
取消文档依据程序相关语法显示不同的颜色 |
:set bg=light |
将文字显示为不同的颜***调,light是默认值 |
:set bg=dark |
将文字显示为不同的颜***调 |
vim 的环境设置与记录:~/.vimrc, ~/.viminfo
vim会主动将你做过的行为记录下来,好让你下次可以轻松作业。那个记录操作的文件是:~/.viminfo,如果你曾经使用过vim,那你的主文件夹应该存在这个文件夹,这个文件是自动产生的,不必自行创建,而你在vim中所做过的操作记录就可以在这个文件内部查询到。
vim ~/.viminfo 可以查看到使用vim打开的文件历史记录
通过配置文件来直接规定我们习惯的vim操作环境,整体vim的设备值一般是放在/etc/vimrc(系统全局变量)这个文件中,不过,不建议去修改它,可以修改vim ~/vimrc 这个文件(默认不存在,需要手动创建),将你需要的值写入,例子:
[[email protected] ~]# cat ~/.vimrc 用户的局部变量
"wangxing" 批注信息
set hlsearch # 高亮度反白
set backspace=2 # 可随时用退格键删除
set autoindent # 自动缩排
set ruler # 可显示最后一行的状态
set showmode # 左下角那一行的状态
set nu # 可以在每一行的最前面显示行号
set bg=dark # 显示不同的底***调
syntax on # 进行语法检验,颜色显示
[[email protected] ~]
中文编码
中文编码有gb2312、big5、与utf8等,如果使用vim打开时 乱码问题需要考虑以下:
1 linux系统默认的语系数据,/etc/sysconfig/i18n
2 你的终端接口(bash)的语系,这个与LANG这个变量有关;
3 你的文件原本编码
编码转换:
iconv -f GB2312 -t UTF-8 gb1.txt >gb2.txt 将GB2312 字码转换成utf-8
7 高级功能
文本内容的局部选择与操作(普通模式)
操作 |
功能 |
v |
选择部分字符,在选择的第一个字符按”v”后移动光标,光标所经过处都会被选择 |
V |
选择若干行,在选择的某行输入“V“,上下移动光标,光标经过行都会被选择 |
Ctrl+v |
选择块,将光标移动文档的某个位置,输入“ctrl+v“,屏幕下方会出现”-VIMSUALBLOCK-“ 状态显示,移动光标,光标覆盖的矩形区域都会被选择 |
y |
被选中的部分复制 |
P |
粘贴复制的部分 |
d |
被选中的部分删除 |
8 打开多个文件
[[email protected] /]# vim -o /etc/passwd /etc/group
打开目录
在末行模式下,:new和:split等命令不但可以打开普通文件还可以打开目录,一个目录打开之后将列出里面的文件信息,输入回车可继续打开相应的文件或子目录,也可输入“?“来查看帮助
vim设置环境文件
[[email protected] /]# vim /etc/vimrc
折叠隐藏文本
当一个文档太长,而用户只需要处理其中的一部分,可以把不需要的行给折叠隐藏起来
设置方法:
1. 在末行模式下输入:set nu 显示行号
2. 在普通模式下输入v,进入可视模式,把光标向下移动选择你需要折叠隐藏的行号,选中后按zf键即可折叠隐藏文本。
如下图:
9 文件恢复功能
使用vim编辑文档时,vim会在被编辑文档的目录下再建立一个名为filename.swap的交换文档,编辑时做的所有动作都会被记录在这个暂存档中,如果系统因某些原因中断了,那么filename.swap就起到救援的功能。
例恢复文件
1) 在vim的普通模式下输入ctrl+z,模仿不正常的文件中断
[1]+ Stopped vim /etc/vimrc
2) 在目录下回找个有一个交换文件
[[email protected] etc]# ll -a .vimrc.swp
-rw-r--r--. 1 root root 12288 Feb 23 09:46 .vimrc.swp
3) 当再次编辑时会出现
E325: ATTENTION
Found a swap file by the name "/etc/.vimrc.swp"
owned by: root dated: Mon Feb 23 09:46:45 2015
file name: /etc/vimrc
modified: no
user name: root host name: wx
process ID: 6803 (still running)
While opening file "/etc/vimrc"
dated: Fri Feb 17 23:17:03 2012
(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same file when making changes.
Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /etc/vimrc"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/etc/.vimrc.swp"
to avoid this message.
Swap file "/etc/.vimrc.swp" already exists! 提示交换文件已经存在
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
[O]pen Read-Only 以只读的方式打开文档
(E)dit anyway 用正常的方式打开编辑的那个文件,但不载入交换文件的内容,注意这样做可能会导致两个使用者互相改变对方的文档。
(R)ecover 就是加载交换文件的内容,对挽救文档存盘并退出vim后,还是要手动自行删除那个交换文件
(D)elete it 确定那个交换文档是没用的,打开文档前删除交换文档
(Q)uit 退出vim,不进行任何动作就返回到命令提示符
(A)bort 忽略这个编辑行为,回到命令提示符
按照以上的提示,可以选择R,删除原来的/etc/.vimrc.swp后即可恢复文档
输入R他会提示Press ENTER or type command to continue
直接回车就行了/
Press ENTER or type command to continue按回车或者类型命令继续
4) 手动删除暂存档
[[email protected] etc]# ll -a .vimrc.swp
-rw-r--r--. 1 root root 12288 Feb 23 09:46 .vimrc.swp
[[email protected] etc]# rm -rf .vimrc.swp
[[email protected] etc]# ll -a .vimrc.swp
ls: cannot access .vimrc.swp: No such file or directory
[[email protected] etc]#
10 vim多行注释
Ctrl+v 进入列模式,向下或向上移动光标,把需要注释的行标记起来,然后按大写I,再插入注释符,比如#,再按esc,就会全部注释,或者也可以运行以下命令:
操作 |
功能 |
:s/^/# |
#用”#” 注释当前行 |
:2,50s/^/# |
#在2~50行首添加”#”注释 |
:.,+3s/^/# |
#用”#”注释当前行和当前行后面的三行 |
:%s/^/# |
#用”#”注释所有行 |
删除多行注释:
A 按下ctrl+v 进入列模式
B 选定要取消的注释符
C 按下”x”或者“d”(这样会删除1列)