vi 与 vim 的指令整理

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

参考网页

    • 少年耶~!
    • 11/23. 2009 2:01下午
    Using Mozilla Firefox Mozilla Firefox 3.5.5 on Ubuntu Linux Ubuntu Linux

    果然是常用的~~!
    感温~!

    • Hades
    • 07/01. 2010 6:00下午
    Using Mozilla Firefox Mozilla Firefox 3.6.6 on Windows Windows 7

    你好~
    我转载您的文章至我的blog上可吗?

  1. Using Mozilla Firefox Mozilla Firefox 3.5.10 on Windows Windows Vista

    to Hades:

    好的,欢迎转载。

    • WENG
    • 07/12. 2015 4:58下午
    Using Google Chrome Google Chrome 43.0.2357.132 on Windows Windows 7

    你好:请问可以转贴至FB分享给其他对LINUX VIM指令不熟悉的人参考?

    • Using Mozilla Firefox Mozilla Firefox 38.0 on Windows Windows NT

      欢迎分享

    • yi
    • 09/05. 2015 5:34下午
    Using Google Chrome Google Chrome 45.0.2454.85 on Windows Windows 7

    请问如果我用vi需要同时收寻2个以上的字串,该如何下指令?或者我收寻完第1个字串,在收寻下个字串时,上一个收寻的字串还是保持在highlight的状态

    谢谢

      • 辜俊肇
      • 09/04. 2018 12:59下午
      Using Mozilla Firefox Mozilla Firefox 61.0 on Ubuntu Linux Ubuntu Linux

      使用 grouping 同时搜寻几个,如/\(字串A\|字串B\)

  2. Using Google Chrome Google Chrome 59.0.3071.115 on Windows Windows NT

    非常详细的介绍~~谢谢!!

    • Mir
    • 01/29. 2019 10:50上午
    Using Google Chrome Google Chrome 71.0.3578.98 on Ubuntu Linux Ubuntu Linux

    请问每行前面的*代表什么意思呢?

    • Using Mozilla Firefox Mozilla Firefox 64.0 on Windows Windows NT

      就只是我认为比较常用的指令而已

  1. 10/05. 2010
  2. 10/04. 2016
    Trackback from : Vim – Vickyliin
  3. 01/20. 2017
  4. 12/24. 2017
  5. 08/01. 2018
  6. 11/04. 2020
  7. 01/17. 2021
  8. 06/02. 2022
    Trackback from : more

return top

%d 位部落客按了赞: