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 | 文本替换 |