vi 被称做是“编辑器之神”,是 unix 家族中功能最强大的文字编辑器,让用户只要使用键盘就可以完成所有的编辑操作。而 vim 则是 vi 的加强版,在 Windows 上也找得到 vim 的芳踪。
vi 有分为功能模式、编辑模式、命令列模式...操作上有众多的指令经常令初学者却步! 它的指令还有区分大小写,以下是我所整理出来那些令人却步的指令:
- 以下指令的前面标记 * 表示为常用指令。
 
- 若指令的第一个字符为 : 或 / 或 ? 表示要在“命令列”输入,通常是先按 ESC 就回到功能模式,直接输入指令就会切换到最下方的命令列,输入完要按 Enter 才会执行。
 
档案功能
 | 
指令 | 
说明 | 
| * | 
:e 档案名称 | 
编辑档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
| * | 
:e! | 
还原至档案编修前的状态 | 
 | 
:Ex | 
列出目前目录下的档案 | 
 | 
:Ex 路径 | 
列出指定路径下的档案 | 
| * | 
:w | 
存盘 (加 ! 表示强制存盘) | 
| * | 
:w 档案名称 | 
另存新档 | 
| * | 
:q | 
退出 vi (加 ! 表示不存盘强制退出) | 
| * | 
:wq | 
存盘并退出 vi | 
| * | 
:x | 
存盘并退出 vi | 
 | 
:w !sudo tee % | 
当你编辑好档案要存盘时,却发现没有写入档案的权限! 用这会指令可以让你直接以 root 的权限存盘 | 
 | 
:r 档案名称 | 
读入档案内容,并加到光标行的后面 | 
| * | 
:n | 
切换到下一个开启的档案 | 
| * | 
:N | 
切换到上一个开启的档案 | 
| * | 
:set nu | 
设定显示行号 | 
| * | 
:set nonu | 
取消行号显示 | 
| * | 
:files | 
列出所有开启的档案 | 
进入编辑模式
 | 
指令 | 
说明 | 
| * | 
a | 
在光标位置后进入编辑模式 | 
| * | 
A | 
在光标行的最后一个字符进入编辑模式 | 
| * | 
i | 
在光标位置进入编辑模式 | 
 | 
I | 
在光标行的第一个非空白字符进入编辑模式 | 
| * | 
o | 
向下新增一行,并进入编辑模式 | 
 | 
O | 
向上新增一行,并进入编辑模式 | 
 | 
cc | 
删除光标行,并进入编辑模式 | 
| * | 
ESC | 
取消指令或退出编辑模式 | 
光标移动
 | 
指令 | 
说明 | 
| * | 
gg | 
移到第一行 | 
| * | 
G | 
移到最后一行 | 
| * | 
:行数 | 
移动到第 n 行 | 
| * | 
行数 → G | 
移动到第 n 行 | 
 | 
0 | 
移动到该行最前面 | 
 | 
$ | 
移动到该行最后面 | 
 | 
字数 → Space | 
向右移动 n 个字符 | 
| * | 
行数 → Enter | 
向下移动 n 行 | 
 | 
h | 
向左移动 | 
 | 
j | 
向下移动 | 
 | 
k | 
向上移动 | 
 | 
l | 
向左移动 | 
标记与复制
 | 
指令 | 
说明 | 
| * | 
v | 
开始字串标记 | 
| * | 
V | 
开始行标记 | 
| * | 
v → Ctrl + V | 
开始区块标记 | 
| * | 
d | 
删除标记的内容 | 
| * | 
y | 
复制标记的内容 | 
| * | 
yy | 
复制光标行 | 
 | 
yG | 
复制光标行到最后一行 | 
 | 
y1G | 
复制光标行到第一行 | 
 | 
y$ | 
复制光标处到最后一个字符 | 
 | 
y0 | 
复制光标处到第一个字符 | 
| * | 
p | 
在下一行贴上复制或删除的内容 | 
 | 
P | 
在上一行贴上复制或删除的内容 | 
| * | 
Ctrl + R → 0 | 
在下一行贴上复制或删除的内容,适用于编辑模式及指令行 | 
删除
 | 
指令 | 
说明 | 
| * | 
dd | 
删除光标行 | 
| * | 
行数 → dd | 
删除 n 行 | 
| * | 
dG | 
删除光标行到最后一行 | 
 | 
d1G | 
删除光标行到第一行 | 
| * | 
d$ | 
删除光标处到最后一个字符 | 
 | 
d0 | 
删除光标处到第一个字符 | 
搜寻与取代
 | 
指令 | 
说明 | 
| * | 
/搜寻字串 | 
向下搜寻字串 | 
| * | 
/\c搜寻字串 | 
向下搜寻字串,不分大小写 | 
 | 
?搜寻字串 | 
向上搜寻字串 | 
 | 
?\c搜寻字串 | 
向上搜寻字串,不分大小写 | 
| * | 
n | 
继续下一个全文搜寻的结果 | 
| * | 
N | 
继续上一个全文搜寻的结果 | 
| * | 
* | 
先将光标移至你想要搜寻的字串,输入 * 就会直接向下搜寻与光标处相同的字串 | 
| * | 
:起始行,终止行s/搜寻字串/取代字串/gic | 
从第 n 行到第 n 行取代字串 (后面的 g 表示整行全部, i 不分大小写 c 询问) | 
| * | 
:1,$s/搜寻字串/取代字串/gic | 
全部取代字串 (后面的 g 表示整行全部, i 不分大小写 c 询问) | 
 | 
:noh | 
清除搜寻结果 | 
| * | 
:set ic | 
设定全文搜寻时不分大小写 | 
| * | 
:set noic | 
设定全文搜寻时要分大小写 | 
| * | 
f → 搜寻字符 | 
向下搜寻字符 (限同一行) | 
| * | 
F → 搜寻字符 | 
向上搜寻字符 (限同一行) | 
视窗分割
 | 
指令 | 
说明 | 
| * | 
:new | 
新增水平分割视窗 | 
| * | 
:new 档案名称 | 
新增水平分割视窗,并加载档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
| * | 
:vnew | 
新增垂直分割视窗 | 
| * | 
:vnew 档案名称 | 
新增垂直分割视窗,并加载档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
 | 
:sp | 
新增水平分割视窗,并在新视窗加载目前的档案 | 
 | 
:sp 档案名称 | 
新增水平分割视窗,并加载档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
 | 
:vsp | 
新增垂直分割视窗,并在新视窗加载目前的档案 | 
 | 
:vsp 档案名称 | 
新增垂直分割视窗,并加载档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
 | 
:Hex | 
新增水平分割视窗,并列出目前目录下的档案 | 
 | 
:Hex 路径 | 
新增水平分割视窗,并列出指定路径下的档案 | 
 | 
:Vex | 
新增垂直分割视窗,并列出目前目录下的档案 | 
 | 
:Vex 路径 | 
新增垂直分割视窗,并列出指定路径下的档案 | 
| * | 
Ctrl + W → 方向键 | 
切换视窗 | 
| * | 
:only | 
仅保留目前的视窗 | 
页签
 | 
指令 | 
说明 | 
| * | 
:tabe | 
新增页签 | 
| * | 
:tabe 档案名称 | 
新增页签,并加载档案 (档案名称输入 . 或路径表示列出目录下的档案) | 
 | 
:Tex | 
新增页签,并列出目前目录下的档案 | 
 | 
:Tex 路径 | 
新增页签,并列出指定路径下的档案 | 
 | 
:tabc | 
关闭目前的页签,等同 :q | 
 | 
:tabo | 
关闭所有页签 | 
 | 
:tabn | 
移至下一个页签 | 
 | 
:tabp | 
移至上一个页签 | 
| * | 
gt | 
移至下一个页签 | 
| * | 
gT | 
移至上一个页签 | 
| * | 
:tabfirst | 
移至第一个页签 | 
| * | 
:tablast | 
移至最后一个页签 | 
| * | 
:tabm 页签编号 | 
移至特定编号的页签 (编号从 0 开始) | 
 | 
:tabs | 
列出所有页签 | 
其它指令
 | 
指令 | 
说明 | 
| * | 
J | 
将光标行与下一行合并 | 
| * | 
u | 
复原上一次的操作 | 
| * | 
Ctrl + R | 
重做上一次的操作 | 
 | 
Ctrl + A | 
将光标处的数字递增 | 
 | 
Ctrl + X | 
将光标处的数字递减 | 
| * | 
Ctrl + N | 
自动补齐曾输入过的单字 | 
| * | 
. | 
重复上一个指令 | 
 | 
! 命令 | 
执行 linux 指令,并显示执行结果 | 
 | 
TOhtml | 
将目前编辑的档案转换成 HTML 原始码 (会新增一个水平分割视窗) | 
档案浏览器操作
请先以 :Ex 相关指令进入档案浏览器
 | 
指令 | 
说明 | 
| * | 
- | 
到上层目录 | 
| * | 
d | 
建立目录 | 
| * | 
D | 
删除目录 | 
| * | 
R | 
重新命名 | 
| * | 
s | 
切换排序方式 | 
 | 
r | 
切换升幂/降幂排序 | 
 | 
i | 
切换档案的排列方式 | 
| * | 
/ | 
搜寻字串 | 
 | 
x | 
执行档案 | 
| * | 
o | 
新增水平视窗 | 
| * | 
v | 
新增垂直视窗 | 
vim 的设定档
通常我会编辑 /etc/vimrc,在档案最后加入:
" 显示列号
set number
" 语法高亮度显示
syntax on
" 标记搜寻到的字串
set hlsearch
" 自动缩排
set autoindent
" 显示说明
set ruler
" 显示编辑状态
set showmode
" 设定注解的颜色
highlight Comment ctermfg=cyan
" 设定搜寻到的字串颜色
highlight Search term=reverse ctermbg=4 ctermfg=7
" 设定 tab 键的字符数
set tabstop=4
参考网页
	
相关
            
    
果然是常用的~~!
感温~!
你好~
我转载您的文章至我的blog上可吗?
to Hades:
好的,欢迎转载。
你好:请问可以转贴至FB分享给其他对LINUX VIM指令不熟悉的人参考?
欢迎分享
请问如果我用vi需要同时收寻2个以上的字串,该如何下指令?或者我收寻完第1个字串,在收寻下个字串时,上一个收寻的字串还是保持在highlight的状态
谢谢
使用 grouping 同时搜寻几个,如/\(字串A\|字串B\)
非常详细的介绍~~谢谢!!
请问每行前面的*代表什么意思呢?
就只是我认为比较常用的指令而已