vi/vim命令
#
vim【vi】有三种常见的模式:Normal Mode(命令模式),Insert Mode(输入模式)和Visual Mode(视图模式)
文件操作
vim【vi】 // 打开一个空文件
vim【vi】 a.txt // 打开当前目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)
vim【vi】 e:\a.txt // 打开e盘目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为e:\)
vim【vi】 + a.txt // 打开当前目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)
vim【vi】 +/Hello a.txt // 打开当前目录中的a.txt文件,并将光标置于第一个与Hello匹配的串处
vim【vi】 +25 e:\a.txt // 打开e盘目录中的a.txt文件,并定位到文件的25行首
vim【vi】 + e:\a.txt // 打开e盘目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为e:\)
vim【vi】 a.txt b.txt c.txt // 打开当前目录中的a.txt,b.txt,c.txt文件;若文件不存在则创建一个名为a.txt,b.txt,c.txt的文件(指定保存位置为当前目录)
:w // 保存文件
:w! // 强制保存文件(文件为只读类型也会被保存)
:w e:\a.txt // 保存到e:\a.txt
:w! e:\a.txt // 强制保存到e:\a.txt
:x【:wq】// 保存并退出
:x【:wq】 e:\a.txt // 保存到e:\a.txt,并退出
:q // 退出(如果未保存,则会退出失败)
:q! // 不保存,强制退出
:open e:\b.txt // 在新缓冲区中打开e:\b.txt文件
:e d:\test.txt // 在新缓冲区中打开d:\test.txt文件
:set fileformat? // 查看当前格式 - unix/dos
:set fileformat=unix // 将当前文件设置成unix格式
:set termencoding=gbk // 将文件内容使用gbk编码显示到SecureCRT等终端上
多文件
:bn // 切换到下一个缓冲区
:bd // 删除当前缓冲区(关闭文件)
:sp test.txt // 在新的缓冲区中打开文件,并分割窗体
ctrl+w,ctrl+s // 分割窗体
ctrl+w,ctrl+w // 切换到不同的窗体
ctrl+w,ctrl+q // 关闭当前窗体
ctrl+w,ctrl+v // 垂直分割窗体
:tabe test.txt // 在新标签页中编辑文件
gt // 下一个标签
gT // 前一个标签
:tabr // 切换到第一个标签
:tabl // 切换到最后一个标签
:tabm 3 // 切换到当前标签后的第3个标签
:xa【:wqa】// 保存所有标签并退出
:qa // 退出所有标签(如果未保存,则会退出失败)
:qa! // 不保存,强制退出所有标签
命令历史记录
q: // 打开历史编辑窗口,按k和j来上下选择命令
// 选择任何一个命令,按回车即可输入该命令并关闭历史编辑窗口(注:最下面一个为空命令)
ctrl+c // 退出历史编辑(但此时历史编辑窗口不关闭),再按esc即可关闭历史编辑窗口
光标移动
h j k l // 左 下 上 右
ctrl + e // 向下滚动一行
ctrl + y // 向上滚动一行
ctrl + d // 向下滚动半屏
ctrl + u // 向上滚动半
ctrl + f // 下一页
ctrl + b // 上一页
ctrl + g // 移动到文件末尾
% // 括号匹配 - 小括号/中括号/大括号
w // 跳到下一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)
W // 跳到下一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)
b // 跳到上一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)
B // 跳到上一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)
e // 跳到当前单词的末尾(使用非字母、数字及下划线的字符作为分隔符号)
E // 跳到当前单词的末尾(仅使用空格、Tab、回车作为分隔符号)
0 // 零 跳到当前行行首
^ // 跳到当前行最前字符的位置
$ // 跳到当前行行末
gg // 跳到第一行最前字符的位置
gd // 跳转当前光标处变量或函数的定义处
G // 跳到当前文件最后一行的最前字符的位置
5G【:5】 // 跳转到第5行最前字符的位置
fx // 在当前行中向后查找字符x
Fx //在当前行中向前查找字符x
; // 重复上一次的f或F命令
, // 执行f或F命令时,向前查找字符x
* // 向后查找当前光标下的单词
# // 向前查找当前光标下的单词
·. // Tab上面的字符+句号 回到上一次编辑所在的行首
H // 到当前屏幕的最上一行
M // 到当前屏幕的中间一行
L // 到当前屏幕的最下一行
插入模式
i // 从当前光标位置插入
I // 从当前行起始处插入
a // 在光标之后插入
A // 在当前行末插入
o // 在当前行下一行插入一个新行
O // 在当前行上一行插入一个新行
ctrl + n // 下一个提示匹配
ctrl + p // 上一个提示匹配
esc // 退出编辑模式
可视模式(用于选中文本)
v // 启动可视模式,移动光标选中字符
V // 启动行可视模式,移动光标选中行
ctrl + v // 启动块可视模式
o // 移动到选择块的另外一端
U // 将当前选择块转成大写
O // 移动到选择块的另外一对角上
aw // 选中一个单词
ab // 选中一个匹配块(如:小括号/中括号/大括号等)
aB // 选中一个括号匹配块
ib // 选中小括号中的内容
iB // 选中大括号中的内容
> // 右移
< // 左移
y // 复制
d // 删除
~ // 将当前选择块内容大小写切换
编辑
cc // 删除当前行内容(并切换到插入模式)
cw // 删除当前光标到所在单词末间的内容(并切换到插入模式)
caw // 删除当前单词(并切换到插入模式)
c$ // 删除当前光标到行末的内容(并切换到插入模式)
s // 删除当前光标字符(并切换到插入模式)
S // 删除当前行内容(并切换到插入模式)
J // 将下一行挪到当前行结尾
r // 替换光标所在处一个字符
rx // 将当前光标处字符替换为字符x
R // 相当于按了insert键,直到按ESC键退出
u // 撤销
ctrl + r // 重做
. // 句号 重复上次命令
~ // 当前光标下字符的大小写转换
g~iw // 当前光标下单词的大小写转换
gUiw // 转换当前光标下单词为大写
guiw // 转换当前光标下单词为小写
<< // 左缩进
>> // 右缩进
== // 自动缩进对齐
剪切、复制和粘贴
dd // 剪切当前行
ndd // 剪切从当前行起的n行内容
dw // 剪切到下一个单词开头
de // 剪切当前光标到本单词末尾
dE // 剪切当前光标到本单词末尾包括标点在内
db // 剪切当前光标到前一个单词
dB // 剪切当前光标到前一个单词包括标点在内
daw // 剪切当前单词
x // 剪切当前字符
nx // 剪切当前的n个字符
X // 剪切当前光标的前一个字符
D // 剪切当前光标到行尾
dG // 剪切当前光标到文件末尾的所有内容
d0 // 剪切当前光标到本行行首的所有内容
d$ // 剪切当前光标到本行行尾的所有内容
d^ // 剪切当前光标到本行首间的内容
:1,100d // 剪切1~100
:100d // 剪切第100行
:1,100 mo $ // 将1~100行的内容移动到最后一行
yy // 复制当前行
nyy // 复制从当前行起的n行内容
yaw // 复制当前光标下的单词
yw // 复制当前光标到所在单词末间的内容
y$ // 复制当前光标到行末间的内容
y^ // 复制当前光标到行首间的内容
yG // 复制当前光标到文件末尾间的内容
p // 在当前光标后插入复制的内容
P // 在当前光标前插入复制的内容
]p // 以恰当的缩进插入复制的内容
:1,100 co 200 // 将1~100的内容复制到第200行
:100,102 co $ // 将100~102行的内容复制到最后一行
搜索和替换
:set hlsearch // 开启匹配字符串的高亮显示
:nohlsearch // 关闭匹配字符串的高亮显示
* 键可以向后搜索光标所在位置的单词,# 键可以向前搜索光标所在位置的单词
/Hello // 搜索Hello字符串
?Hello // 向前搜索Hello字符串
/Hello\c // 搜索Hello字符串(忽略大小写)
?Hello\c // 向前搜索Hello字符串(忽略大小写)
n // 向正方向搜索下一个字符串
N // 向反方向搜索下一个字符串
:%s/Hello/Test/g // 全局替换当前文件中所有的Hello为Test
:%s/Hello/Test/gc // 全局替换当前文件中所有的Hello为Test(需要逐个确认)
:%s/Hello/Test/gci // 全局替换当前文件中所有的Hello(忽略大小写)为Test(需要逐个确认)
参考