粘贴复制缩进错乱:
:set paste
进入粘贴模式,就ok了
具体操作,记下常用的,备用:转载自
表 1. 启动及关闭 Vi/Vim 的基本命令
功能 | 命令 | 说明 |
---|---|---|
启动 | vi 打开 Vi/Vim vi <file> 打开 Vi/Vim 并加载文件 <file> |
|
退出 |
ZQ 无条件退出 :q! 无条件退出 ZZ 存盘并退出 :wq 存盘并退出 |
|
保存部分文件 |
:m,nw <file> 将 m 行到 n 行部分的内容保存到文件 <file> 中 :m,nw >> <file> 将 m 行到 n 行的内容添加到文件 <file> 的末尾 |
定位:
操作单位 | 命令 | 说明 |
---|---|---|
字符 | h 左移一字符 l 右移一字符 |
|
单词 |
w/W 移动到下一单词的开头 b/B 移动到上一单词的开头 e/E 移动到光标所在单词的末尾 |
W、B、E 命令操作的单词是以空白字符(空格、Tab)分隔的字串,比如字符串“str1-str2 str3-str4”,对 W、B、E 命令来说是两个单词,而对 w、b、e 命令来说则是四个单词。 |
行 |
j 下移一行 k 上移一行 0 移到当前行开头 ^ 移到当前行的第一个非空字符 $ 移到当前行末尾 :n 移动到第 n 行 |
0 为数字零(zero) |
句子 |
) 移动到当前句子的末尾 ( 移动到当前句子的开头 |
|
段落 |
} 移动当前段落的末尾 { 移到当前段落的开头 |
|
屏 |
H 移动到屏幕的第一行 M 移动到屏幕的中间一行 L 移动到屏幕的最后一行 |
|
页 |
Ctrl-f 向前滚动一页 Ctrl-b 向后滚动一页 Ctrl-u 向前滚动半页 Ctrl-d 向后滚动半页 |
|
文件 |
G 移动到文件末尾 gg 移动到文件开头 :0 移动到文件第一行 :$ 移动到文件最后一行 |
0 为数字零(zero) |
括号 | % | 跳转到与之匹配的括号处 |
文本编辑
表 3. 文本编辑的基本命令
操作单位 | 命令 | 说明 |
---|---|---|
字符 | x 删除光标位置的字符 c 更改当前字符并进入插入模式 s 替换光标位置的字符并进入插入模式 r 替换光标位置的字符但不进入插入模式 i 在当前位置的字符之前进入插入模式 a 在当前位置的字符之后进入插入模式 |
|
单词 |
cw/cW 删除当前单词从光标开始的部分并进入插入模式 cb/cB 删除当前单词从光标所在位置至单词开始的部分并进入插入模式 dw/dW 删除当前单词从光标开始的部分但不进入插入模式 db/dB 删除当前单词从光标所在位置至单词开始的部分但不进入插入模式 |
cW、cB、dW、dB 命令操作的单词是以空白字符(空格、Tab)分隔的字串,比如字符串“str1-str2 str3-str4”,对 cW,cB,dW,dB 命令来说是两个单词,而对 cw、cb、dw、db 命令来说则是四个单词。 |
行 |
dd 删除当前行 d0 删除从当前光标开始到行末的内容 d$ 删除从当前光标开始到行末的内容 I 在当前行的行首进入插入模式 A 在当前行的行尾进入插入模式 o 在当前行下方另起一行进入插入模式 O 在当前行上方另起一行进入插入模式 |
|
句子 |
d) 删除当前句子从光标位置开始到句末的内容 d( 删除当前句子从光标位置开始到句首的内容 |
|
段落 |
d} 删除当前段落从光标位置开始到段末的内容 d{ 删除当前段落从光标位置开始到段首的内容 |
表 4. 文本编辑的高效命令
功能 | 命令 | 说明 |
---|---|---|
复制与粘贴 | yw 复制当前单词从光标开始的部分 yy 复制光标所在行的所有字符 p 将最后一个删除或复制文本放在当前字符 P 将最后一个删除或复制文本放在当前字符之前 |
配合操作数使用可快速拷贝编辑文本 |
撤消与重做 |
u 撤消更改 Ctrl-R 重做更改 |
非常实用的一个命令 |
重复操作 | . 重复上次操作 |
|
交换相邻字符或行 |
xp 交换光标位置的字符和它右边的字符 ddp 交换光标位置的行和它的下一行 |
|
大小写转换 |
~ 将光标下的字母大小写反向转换 guw 将光标所在的单词变为小写 guw 将光标所在的单词变为小写 gUw 将光标所在的单词变为大写 guu 光标所在的行所有字符变为小写 gUU 光标所在的行所有字符变为大写 g~~ 光标所在的行所有字符大小写反向转换 |
|
取得外部输入 |
: r!<cmd> 将命令 <cmd> 的输出结果插入到当前光标所在位置 :r <file> 将文件 <file> 读入到当前光标所在位置 |
|
排序 | :1,$!sort 将文件内的所有内容排序 | |
加入行号 |
:%!nl 在所有非空行前加入行号 :%!nl -ba 在所有行前加入行号 |
利用 Linux 命令 nl 来实现的 |
缩进 |
>> 右缩进(可配合操作数使用) << 左缩进(可配合操作数使用) |
配合操作数使用,在编辑源码的时候非常有用。 |
自动补全 | Ctrl-p 自动补全 | 在编写代码的时候非常有用。比如,输入 prin 后按 Ctrl-p 将自动帮你输入 printf 函数名后面的部分,同时将相关备选函数在底下列出来。 |
显示当前编辑文件名 | Ctrl-g 显示当前编辑文件名及行数 | 可以在不退出 Vi/Vim 情况下了解当前编辑文件的信息 |
显示字符内码 | ga 显示光标所在字符的内码(包括十进制码,十六进制码以及八进制码) | 显示的内码为当前 encoding 下的内码 |
文本搜索与替换
Vi/Vim 用于文本搜索的主要有下面的三个基本命令:
表 5. 文本搜索的基本命令
功能 | 命令 | 说明 |
---|---|---|
搜索 | / 在文件中向前搜索 ? 在文件中向后搜索 |
|
搜索下一个 |
n 搜索下一个 N 反向搜索下一个 |
|
表 6. 文本搜索的高效命令
功能 | 命令 | 说明 |
---|---|---|
快速搜索 | * 在文件中向前搜索当前光标所在的单词 # 在文件中向后搜索当前光标所在的单词 |
非常快捷的搜索命令 |
显示搜索命令历史 |
q/ 显示搜索命令历史的窗口 q? 显示搜索命令历史的窗口 |
可以选择重用以前用过的搜索查找命令 |
查找帮助 | Shift-k 查找光标所在命令或函数的 man 帮助 |
|
表 8. Vi/Vim 设置命令
功能 | 命令 | 说明 |
---|---|---|
查看设置的当前值 | :set all 查看 vi 或 Vim 中设置的所有选项的当前值 :set <option>? 查看特定选项 <option> 的当前值 |
|
设置行号显示与否 |
:set number 显示行号 :set no number 取消行号显示 |
命令的简写形式: :set nu :set no nu |
设置自动缩进 |
:set autoindent 设置自动缩进 :set no autoindent 取消自动缩进设置 |
命令的简写形式: :set ai :set no ai |
设置缩进宽度 | :set shiftwidth=4 设置缩进宽度为 4 |
命令的简写形式: :set sw=4 |
设置大小写忽略与否 |
:set ignorecase 设置忽略大小 :set no ignorecase 取消忽略大小设置 |
命令的简写形式: :set ic :set no ic |
设置不可见字符显示与否 |
:set list 显示不可见字符 :set nolist 取消显示不可见字符设置 |
在显示不可见字符的情况下,TAB 键显示为 ^I,而 $ 显示在每行的结尾。 |