参考资料
杂项
显示当前文件名和行数
Ctrl+G
刷新屏幕
Ctrl+R
查看vim的位置
:echo $VIM
查看用户目录位置
:echo $HOME
显示vi版本
:version
读入和保存
在当前位置读入执行dir命令后的结果
:r dir
在vi中打开file1
:e file1
强制关闭vim,不保存所有文件
:qa!
保存所有文件并退出vim
:xa
将对所有文件的修改写入
:wa
返回到文件未被修改的状态
:e!
判断文本内容是否变更,如果已变更则保存并退出,如果未变更则直接退出
ZZ
将dir命令的结果写入当前行
:r! dir
移动
向下移动20行
20j
屏幕向下翻一页
Ctrl+f
屏幕向上翻一页
Ctrl+b
移动到一行的最前面
0
移动到一行的最后面
$
移动到文件的最后一行
G
移动到文件的第一行
gg
移动到文件的第17行
17G
光标向下移动9行
:9
在匹配的括号、中括号中移动
%
复制、删除和粘贴
向前删除一个字
X
向后删除一个字
x
向后删除2个单词
2cw
删除光标在的行
dd
从当前位置删除到行末
D
复制光标在的行
yy
复制从光标位置开始向下的6行
6yy
在光标位置下方粘贴
p
在光标位置上方粘贴
P
与光标所在位置的后一个字符互相交换位置
xp
在光标位置后粘贴最后一次删除的内容
p
撤销和恢复
撤销上次操作
u
重做上次操作
Ctrl+r
撤销对最后一次更改的行的操作
U
重复上次操作
.
插入操作
后插入系
在光标所在位置之后插入
a
在光标所在行的最后位置插入
A
前插入系
在光标所在位置之前插入
i
在光标所在行的第一个字符处插入
I
行插入系
向所在行之下插入一个新行
o
向所在行之上插入一个新行
O
删除插入系
清空当前行并在当前行位置插入
ss
S
清空当前位置的一个字符并在原字符位置插入
s
替换插入系
R
查找和替换
向下查找”str”
/str
向上查找”str”
?str
转到第一个匹配的查找结果
ggn
转到最后一个匹配的查找结果
GN
移动到下一个匹配的查找项目
n
移动到上一个匹配的查找项目
N
在第3和第14行之间查找”str1”,替换为”str2”
:3,14s/str1/str2/g
在第1和最后一行之间查找”str1”,替换为”str2”
:1,$s/str1/str2/g
字符、行、列选择
进入字符串选择模式
v
进入行选择模式
V
进入列选择模式
ctrl+v
复制选定的部分
y
删除选定的部分
d
编辑多个文件
打开文件file1和file2
vim file1 file2
查看vim编辑的所有文件
:file
切换到下一个文件编辑
:n
切换到上一个文件编辑
:N
分屏编辑
打开同文件的一个新窗口
:sp
在新窗口打开file2
:sp file2
切换到下方窗口
[Ctrl+w]+j
切换到上方窗口
[Ctrl+w]+k
退出分屏窗口
[Ctrl+w]+q
使用标签编辑
在2个标签中分别打开file1和file2
vim -p file1 file2
跳转到下一个标签
gt
跳转到上一个标签
gT
vi的备份文件
备份文件名为.*.swp,恢复文件内容后,必须手动删除此备份文件,否则下次打开原文件时还会提示恢复暂存文件。
当vi发现暂存文件的提示操作选项
- Open Read-Only⇒打开不修改
- Edit anyway⇒正常打开
- Recover⇒加载备份文件
- Delete it⇒删除备份文件
- Quit⇒退出
- Abort⇒忽略
vi的配置文件
- 系统级配置文件位置:$VIM/vimrc
- 用户级配置文件位置(nt):$HOME/_vimrc
set hlsearch "高亮显示搜索关键字 set backspace=2 "允许使用退格删除字符,0和1为仅可删除刚输入的字符,无法改动原有的内容,2为可删除任何字符 set ruler "显示状态 set showmode "显示当前模式 set nu "显示行号 set autoindent "自动缩进 set showmatch "移动到(或{时,自动提示匹配的括号 set ignorecase "强制忽略大小写,Hi会匹配到Hi和hi set smartcase "智能大小写识别,Hi只会匹配到Hi,hi会同时匹配hi和Hi set incsearch "查找开始后光标立即定位到下一个匹配的结果上 set nowrapscan "禁止循环搜索 set wrapscan "启用循环搜索(默认状态),当搜索到文件头或文件尾时开始循环 set list "显示制表符和到行尾标志 set softtabstop=4 "4个空格替代一个制表符 set shiftwidth=4 " set history=1000 "记录的命令历史记录数 set tabstop=2 "设置制表符占的空格数量