先教大家怎么退出 vi,请输入指令 :q 再按 Enter 即可。
vi 被称为“编辑器之神”,是 unix 家族中功能最强大的文字编辑器,让用户只要使用键盘就可以完成所有的操作。而 vim 则是 vi 的加强版,在 Windows 上也找得到 vim 的芳踪。
vi 有分为浏览模式、编辑模式、命令列模式...并有超多的功能撘配超多的指令,需要用户去记忆。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 |
向上新增一行,并进入编辑模式 |
| * |
ciw |
删除光标上的单词,并进入编辑模式 |
| * |
C |
删除光标位置到行尾,并进入编辑模式 |
|
c |
删除标记的内容,并进入编辑模式 |
|
cc |
删除光标行,并进入编辑模式 |
|
r |
取代光标位置的“一个字符” |
|
R |
在光标位置进入“取代模式”,能取代所有字符 |
| * |
dd |
删除光标行 |
| * |
D |
删除光标位置到行尾 |
| * |
diw |
删除光标位置的单词 |
| * |
x |
删除光标位置的“一个字符” |
| * |
J |
将光标行与下一行合并 |
| * |
ESC |
取消指令或退出编辑模式 |
浏览模式 / 光标移动
|
指令 |
说明 |
| * |
gg |
移到第一行 |
| * |
G |
移到最后一行 |
| * |
{ |
移到上一个段落 |
| * |
} |
移到下一个段落 |
|
[{ |
移到程式区块的开头 |
|
]} |
移到程式区块的结尾 |
| * |
% |
移到对应的括号 |
| * |
b |
移到上一个单词 |
| * |
w |
移到下一个单词 |
| * |
g; |
移到较早的编辑位置 |
| * |
g, |
移到较新的编辑位置 |
|
:changes |
查看编辑记录 |
| * |
:行数 |
移到第 n 行 |
| * |
行数 → G |
移到第 n 行 |
|
0 |
移到行首 |
|
$ |
移到行尾 |
|
^ |
移到光标行的第一个非空白字符 |
|
g_ |
移到光标行的最后一个非空白字符 |
|
字数 → Space |
向右移 n 个字符 |
| * |
行数 → Enter |
向下移 n 行 |
|
h |
向左移动 |
|
j |
向下移动 |
|
k |
向上移动 |
|
l |
向左移动 |
浏览模式 / 标记与复制功能
|
指令 |
说明 |
| * |
v |
开始字串标记 |
| * |
V |
开始行标记 |
| * |
v → Ctrl + V |
开始区块标记 |
| * |
d |
剪下并复制标记的内容 |
| * |
x |
剪下并复制标记的内容 |
| * |
y |
复制标记的内容 |
| * |
yiw |
复制光标位置的单词 |
| * |
Y |
复制光标行 |
| * |
yy |
复制光标行 |
|
yG |
复制光标行到最后一行 |
|
y1G |
复制光标行到第一行 |
|
y$ |
复制光标位置到行尾 |
|
y0 |
复制光标位置前到行首 |
| * |
p |
若复制的是“字串”,则在光标后贴上复制内容。
若复制的是“行”,则在下一行贴上复制内容。 |
|
P |
若复制的是“字串”,则在光标前贴上复制内容。
若复制的是“行”,则在前一行贴上复制内容。 |
| * |
Ctrl + R → 0 |
若复制的是“字串”,则在光标后贴上复制内容。
若复制的是“行”,则在下一行贴上复制内容。
(适用于编辑模式及指令行) |
浏览模式 / 删除功能
|
指令 |
说明 |
| * |
x |
删除光标位置的“一个字符” |
| * |
dd |
删除光标行 |
| * |
D |
删除光标位置到行尾 |
| * |
diw |
删除光标位置的单词 |
| * |
行数 → dd |
删除 n 行 |
| * |
dG |
删除光标行到最后一行 |
|
d1G |
删除光标行到第一行 |
| * |
d$ |
删除光标位置到行尾 |
|
d0 |
删除光标位置到行首 |
浏览模式 / 搜寻与取代
|
指令 |
说明 |
| * |
/搜寻字串 |
向下搜寻字串 |
| * |
/\c搜寻字串 |
向下搜寻字串,不分大小写 |
|
?搜寻字串 |
向上搜寻字串 |
|
?\c搜寻字串 |
向上搜寻字串,不分大小写 |
| * |
n |
继续下一个搜寻的结果 |
| * |
N |
继续上一个搜寻的结果 |
| * |
* |
向下搜寻与光标位置相同的单词 |
|
# |
向上搜寻与光标位置相同的单词 |
| * |
:起始行,终止行s/搜寻字串/取代字串/gic |
从第 n 行到第 n 行取代字串 (后面的 g 表示整行全部, i 不分大小写 c 询问) |
|
:1,$s/搜寻字串/取代字串/gic |
全部取代字串 (后面的 g 表示整行全部, i 不分大小写 c 询问) |
| * |
:%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 |
列出所有页签 |
浏览模式 / 其它指令
|
指令 |
说明 |
| * |
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\)
非常详细的介绍~~谢谢!!
请问每行前面的*代表什么意思呢?
就只是我认为比较常用的指令而已