vi / vim 命令
vi命令是Linux系统最常用的文本编辑指令.
vim是从 vi 发展出来的一个文本编辑器。增加了如代码补全、编译及错误跳转等方便编程的功能.
命令语法:
用法: vim [参数] [文件 ..] 编辑指定的文件 (文件不存在时会新建)
或: vim [参数] - 从标准输入(stdin)读取文本
或: vim [参数] -t tag 编辑 tag 定义处的文件
或: vim [参数] -q [errorfile] 编辑第一个出错处的文件
参数:
-- 在这以后只有文件名
-v Vi 模式 (同 "vi")
-e Ex 模式 (同 "ex")
-E Improved Ex mode
-s 安静(批处理)模式 (只能与 "ex" 一起使用)
-d Diff 模式 (同 "vimdiff")
-y 容易模式 (同 "evim",无模式)
-R 只读模式 (同 "view")
-Z 限制模式 (同 "rvim")
-m 不可修改(写入文件)
-M 文本不可修改
-b 二进制模式
-l Lisp 模式
-C 兼容传统的 Vi: 'compatible'
-N 不完全兼容传统的 Vi: 'nocompatible'
-V[N][fname] Be verbose [level N] [log messages to fname]
-D 调试模式
-n 不使用交换文件,只使用内存
-r 列出交换文件并退出
-r (跟文件名) 恢复崩溃的会话
-L 同 -r
-A 以 Arabic 模式启动
-H 以 Hebrew 模式启动
-F 以 Farsi 模式启动
-T <terminal> 设定终端类型为 <terminal>
-u <vimrc> 使用 <vimrc> 替代任何 .vimrc
--noplugin 不加载 plugin 脚本
-P[N] 打开 N 个标签页 (默认值: 每个文件一个)
-o[N] 打开 N 个窗口 (默认值: 每个文件一个)
-O[N] 同 -o 但垂直分割
+ 启动后跳到文件末尾
+<lnum> 启动后跳到第 <lnum> 行
--cmd <command> 加载任何 vimrc 文件前执行 <command>
-c <command> 加载第一个文件后执行 <command>
-S <session> 加载第一个文件后执行文件 <session>
-s <scriptin> 从文件 <scriptin> 读入正常模式的命令
-w <scriptout> 将所有输入的命令追加到文件 <scriptout>
-W <scriptout> 将所有输入的命令写入到文件 <scriptout>
-x 编辑加密的文件
-i <viminfo> 使用 <viminfo> 取代 .viminfo
vi可以分为三种状态:
- 命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段。按[i或a或o等]键进入编辑模式,输入冒号:进入底行命令模式
- 编辑模式
只有在编辑模式下,才可以做文字输入,按「ESC」键可回到命令模式。
- 底行命令模式
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。按ESC键返回命令模式
命令模式下指令说明
| 命令 | 功能 |
|---|---|
| i | 进入编辑模式,在当前光标前插入文本 |
| a | 进入编辑模式,在当前光标后插入文本 |
| A | 进入编辑模式,在当前行末尾插入文本 |
| o | 进入编辑模式,在当前行后插入一个空白行,光标移到新行 |
| O | 进入编辑模式,在当前行前插入一个空白行,光标移到新行 |
| y+移动命令 | 复制移动命令对应内容 |
| yy | 复制当前行,nyy可以复制多行 |
| p | 粘贴 |
| u | 撤销上次命令 |
| ctrl+r | 恢复撤销命令 |
光标移动
| 命令 | 功能 |
|---|---|
| h 或 左移键 | 光标左移一个字符 |
| l 或 右移键 | 光标右移一个字符 |
| k 或 上移键 | 光标上移一个行 |
| j 或 下移键 | 光标下移一个行 |
| 0 或 Home键 | 光标移到行首 |
| ^ | 光标移到行道,第一个不是空白字符的位置 |
| $ 或 End键 | 光标移到行尾 |
| w | 向后移动一个单词 |
| b | 向前移动一个单词 |
| gg | 光标移到文件首 |
| G | 光标移到文件尾 |
| 数字gg | 移动到数字对应行数 |
| ctrl+b 或 PageUp | 向上翻页 |
| ctrl+f 或 PageDown | 向下翻页 |
| H | 屏幕顶部 |
| M | 屏幕中间 |
| L | 屏幕底部 |
选择文本(可视模式)
| 命令 | 功能 |
|---|---|
| v | 可视模式,从光标位置开始移动选择文本 |
| V | 可视行模式,选中光标经过的完整行 |
| ctrl+v | 可视块模式,垂直方向选中文本 |
- Esc可以放弃选中,回到命令模式
- 可视模式下,可以和移动命令连用,例如:ggVG能过选中所有内容
标记
在文本某处使用m增加一个标记,可以在需要时快速地跳转回来。标记名称可以是a~z或A~Z之间地任意一个字母。如:
mz 将光标处理标记为z
'z 跳转到标记z处
添加了标记的行如果被删除,标记同时被删除。
如果在其他行添加了相同标记名称的标记,之前添加的标记会被替换。
删除
| 命令 | 功能 |
|---|---|
| x 或 delete键 | 删除光标所在字符 |
| d + 移动命令 | 删除移动命令对应内容 |
| dd | 删除当前行 |
| r | 替换当前字符 |
| R | 替换当前光标后面的字符 |
- 如果使用可视模式已选中了一段文本,d和x都可以删除选中文本
- 删除命令可以和移动命令连用,以下是常见的组合:
- dw 从光标位置删除到单词末尾
- d0 从光标位置删除到一行的起始位置
- d} 从光标位置删除到段乱结尾
- ndd 从光标位置向下连续删除n行
- d行数G 从光标所在行删除到指定行数之间的所有文本
- d'a 从光标所在行删除到标记a之间的所有代码
查找
| 命令 | 功能 |
|---|---|
| /word | 向下查找word字符串 |
| ?word | 向上查找word字符串 |
| n | 重复前一个查找动作,向下查找 |
| N | 重复前一个查找动作,向上查找 |
底行命令模式
| 命令 | 功能 |
|---|---|
| :w | 保存之前的编辑 |
| :w! | 若文件属性为'只读'时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关 |
| :q | 退出vi |
| :q! | 退出vi,如果有修改过不保存 |
| :wq | 保存修改并退出vi |
| :x | 保存修改并退出vi |
| :w [filename] | 将编辑的数据保存到另一个文件(类似另存为) |
| :set nu | 显示行号 |
| :set ff[=unix/windows] | 显示或设置文件格式(unix或windows格式),如windows编辑的shell脚本传到unix上需要转换下 |
| :sp | 横向分屏 |
| :vsp | 竖向分屏 |
| :%s/旧文本/新文本/g | 文本替换 |