1. 模式切换
vim的模式 $ vi filename 进入normal 模式,这是命令模式,用于执行大多数常用的编辑命令,不能输入
敲i 进入 insert 模式,这是正常的编辑模式,按Esc 可以回到 normal 模式
在normal 模式下输入 : (冒号) 进入底行模式,也是执行命令的模式,用的最多的是查找
不管在 insert 模式还是底行模式,按 Esc 就能回到 normal 模式 insert 模式和底行模式是不能直接相互切换的,只能通过 normal 模式切换
2. 保存退出
保存,退出,环境变量
:w : 将编辑的数据写入硬盘档案中(常用)
:w!: 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q: 离开 vi (常用)
:q! : 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq: 储存后离开
:x : 储存后离开
:wq! : 强制储存后离开
ZZ: 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename]: 另存为
:r [filename]: 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到光标所在行后面
:! : command 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 『:! cat ./test』即可在 vi 当中察看当前文件夹中的test文件中的内容
3. 环境变量
:set nu : 设置行号(常用)
:set nonu : 取消行号(常用)
:set hlsearch : 设置高亮度查找
:set nohlsearch : 取消高亮度查找
:set backup : 自动备份文件
:set ruler : 开启右下角状态栏说明
:set showmode : 显示左下角的INSERT之类的状态栏
:set backspace={0,1,2} : 设置退格键功能。为2时可以删任意字符。为0或1时仅可以删除刚才输入的字符。
:set all : 显示目前所有的环境参数值
:set : 显示与系统默认值不同的参数值
:syntax on/off : 是否开启依据相关程序语法显示不同的颜色
:set bg=dark/light : 是否显示不同的颜色色调
4. 光标操作
h 或 向左箭头键(←): 光标向左移动一个字符
20h或者20(←): 光标向左移动20个字符,
j 或 向下箭头键(↓): 光标向下移动一行
20j或者20(↓): 光标向下移动20行,
k 或 向上箭头键(↑): 光标向上移动一行
20k或者20(↑): 光标向上移动20行
l 或 向右箭头键(→): 光标向右移动一个字符
20l或者20(→): 光标向右移动20字符,
^ : 移动这一行的开头,与$相对应
Ctrl + f : 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
Ctrl + b: 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
Ctrl + d : 屏幕『向下』移动半页
Ctrl + u: 屏幕『向上』移动半页
Ctrl + e: 屏幕『向下』移动一行
Ctrl + y : 屏幕『向上』移动一行
+ : 光标移动到非空格符的下一列
- : 光标移动到非空格符的上一列
n<space>: 那个 n 表示『数字』,按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
n<Enter> : n 为数字。光标向下移动 n 行(常用)
0: 或功能键[Home] 移动光标到下一行最前面,并进入到insert状态
$: 或功能键[End] 移动到这一行的最后面字符处(常用),这里的$在正则里面表示是结尾的意思,这样理解一下就能记住
H: 光标移动到这个屏幕的最上方那一行的第一个字符,H你就把它记成是header的缩写,这样就好记了
M: 光标移动到这个屏幕的中夬那一行的第一个字符,M你就把它记成middle的缩写
L: 光标移动到这个屏幕的最下方那一行的第一个字符,L你就把它记成last的缩写
G : 移动到这个档案的最后一行(常用)
nG n: 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行
gg : 移动到这个档案的第一行,相当于 1G (常用)
5. 删除,复制,粘贴,撤销
x, X: 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n: 为数字,连续向后删除 n 个字符。举例来说,我要连续删除光标后 10 个字符, 『10x』。
nX n: 为数字,连续删除光标前面的 n 个字符。举例来说,我要连续删除光标前的 10 个字符, 『10X』。
dd: 删除光标所在的那一整行(常用)
yy: 复制光标所在的那一行(常用)
ndd: n 为数字。删除光标所在行向下 n 行,例如 20dd 则是删除 20 行(常用)
nyy: n 为数字。复制光标所在行向下 n 行,例如 20yy 则是复制 20 行(常用)
d1G: 删除光标所在行到第一行的所有数据
y1G: 复制光标所在行到第一行的所有数据
dG: 删除光标所在行到最后一行的所有数据
yG: 复制光标所在行到最后一行的所有数据
d$: 删除光标所在处,到该行的最后一个字符
y$: 复制光标所在的那个字符到该行行尾的所有数据
d0: 那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符
y0: 复制光标所在的那个字符到该行行首的所有数据
p, P : p将复制的数据,粘贴在光标的下一行,P将复制的数据,粘贴到光标的上一行
J: 将光标所在行不下一行的数据结合成同一行
c : 重复删除多个数据,可以通过上下键来决定删除光标上面的,还是下面的
u : 撤销。(常用)
Ctrl + r: 撤销的撤销。(常用)
6 选择,查找 ,替换
v : 字符选择,会将光标经过的地方反白选择!
V : 行选择,会将光标经过的行反白选择!
Ctrl + v “: 区块选择,可以用长方形的方式选择资料
y : 将反白的地方复制起来
d : 将反白的地方删除掉
/string: 向光标之下寻找一个名称为string字符串
?string: 向光标之上寻找一个名称为string字符串
n: 正向查找,搜索出的string,可以理解成next
N: 反向查找,搜索出的string,可以理解成Not next
:n1,n2s/string1/string2/g : 这里的n1是查找的开始行数,n2是查找结束的行数。【:2,7s/ddd/fff/g】在第2行,第7行之间,将ddd替换成fff
:1,$s/string1/string2/g : 从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !(常用)
:1,$s/string1/string2/gc : 从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !且在替换前显示提示字符给用户确认 (confirm) 是否需要替换!(常用)
7. 文件恢复
目前主要的编辑器都有恢复功能,vim也不例外。vim是通过“保存”文件来挽回数据的。
每当我们在用vim编辑时,vim都会自动在被编辑的文件的目录下面再新建一个名为filename.swap的文件。这就是一个暂存文件,我们对文件filename所做的操作都会被记录到这个文件当中。如果系统意外崩溃,导致文件没有正常保存,那么这个暂存文件就会发挥作用。下面用一个例子来说明(Note:我用的是Ubuntu)。
打开终端,输入命令,将etc目录下面的manpath.config复制到tmp目录下面,并且更改当前工作目录为tmp:
cp /etc/manpath.config /tmp
cd /tmp
用vim编辑manpath.config文件:vim manpath.config。
我们在vim的一般模式下按下Ctrl+z组合键,vim就会被丢到后台执行。回到命令提示符环境后,我们模拟将vim的工作不正常中断。
kill -9 %1;强制杀死制定的进程。
这样导致暂存盘无法通过正常的流程结束,所以暂存文件不会消失,而是继续保留下来。当再次编辑那个文件时(输入命令vim manpath.config),出现(ubuntu 11.10):
这时,有六个按钮可以使用:
O(pen for Read-Only):打开成只读文件。
E(dit):用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。
R(ecover):加载暂存文件的内容。
D(elete):如果你确定这个暂存文件是没有用的,则可以删除。
Q(uit):不进行任何操作,回到命令行。
A(bort):忽略这个编辑行为,和Q类似。
需要注意的是:这个暂存文件不会应为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。
8. 宏
这是一个ini类型的配置文件,可以看到每一行的最前面有一个逗号,现在如果需要将每行前面的逗号去掉,怎么办?在第一行行首按x,然后按j,然后按x...这样重复下去?确实,我最开始也是这样的,但如果这个文件有100行要这样修改呢?或者1000行?
;=====================================================================================
;This is a sample configuration file when upgrading XXX using InstallShield.
;Author: ini_always
;Date: 8/24/2011
;Last modified: 9/20/2011
;Note: Install script does NOT verify whether the configuration file is in a "WELL"
;format, a WRONG format may lead to installation failure.
;If more information is needed, please check the document for details.
;=====================================================================================
好吧,少废话,进入正题。所谓宏,在vim里面是指某种特定顺序的一系列操作,我们可以录制自己的操作序列,然后重复这个序列多次,以简化某种重复的操作。vim宏有录制和播放的过程,录制就是你教给vim该怎么操作,播放就是vim照着你教的进行自动操作。因此,对于上面的文件处理,首先要进行宏录制:
1.把光标定位在第一行;
2.在normal模式下输入qa(当然也可以输入qb, qc, etc,这里的a, b, c是指寄存器名称,vim会把录制好的宏放在这个寄存器中)(PS:如果不知道什么是vim的寄存器,请自行放狗搜之);
3.正常情况下,vim的命令行会显示“开始录制”的字样,这时候,把光标定位到第一个字符(按0或者|),再按x删除,按j跳到下一行;
4.normal模式下输入q,结束宏录制。
好了,经过以上步骤,我们定义了一个存储在寄存器a中的宏,它的操作序列是:0->x->j,也就是跳到行首,删除,跳到下一行。
现在,第一行已经删除了行首的逗号,而且光标也已经在第二行,现在,在normal模式下输入@a,以播放我们刚录制好的存在寄存器a中的宏。于是,第二行行首的逗号也被删除,光标停在了第三行。
这也不简单啊?你肯定会这样想,要删除100行,我还得输入100个@a,我还不如手动删除呢。呵呵,vim早就想到了,输入7@a,好了,剩下的7行全部搞定了。(PS:在命令前面加数字,就是代表要执行这个命令多少次)
当然,这个例子很简单,但也很典型。利用好vim的宏,可以使一些原本很无聊的工作要简单很多。
9 ( . ) 命令
重复上次操作