vim
写在前面
内容来自网络总结
状态模式
按键 | 作用 |
---|---|
i | 进入 插入 模式 |
ni | 进入 重复插入 模式 |
ESC | 返回 命令 模式 |
v | 进入 可视 模式 |
V | 进入 行可视 模式 |
CTRL+v | 进入 块可视 作模式 |
Ixxx | 在被选中的块的前面插入xxx |
0Ixxx | 在被选中的块的每一行的行首插入xxx |
Axxx | 在被选中的块的后面追加xxx |
光标控制
按键 | 作用 | |
---|---|---|
k | 向上移一行 | |
j | 向下移一行 | |
h | 向左移一列 | |
l | 向右移一列 | |
nk | 向上移动n行 | |
nh | 向左移动n列 | |
gg | 移到到第一行 | |
G | 移到文件的最后一行 | |
nG或: n |
移到文件的第n行 | |
L | 移到屏幕的最后一行 | |
M | 移到屏幕的中间一行 | |
H | 移到屏幕的第一行 | |
( | 移到句子的开头 | |
) | 移到句子的结尾 | |
{ | 移到段落的开头 | |
} | 移到下一个段落开头 | |
% | 移动到与制匹配的括号上去(),{},[],<>等 | |
0 | 移到当前行的开头 | |
n` | ` | 移到当前行的第n列 |
$ | 移到当前行的最后(块模式下,$将块选择中的每一行都扩展至行尾) | |
n$ | 移动到第n行的行尾 | |
^ | 移到当前行的第一个非空字符 | |
e | 向后移一个单词到结尾 | |
ne | 向后移n个单词到结尾 | |
E | 向后移一个单词到结尾,忽略标点符号 | |
b | 向前移一个单词到开头 | |
nb | 向前移n个单词到开头 | |
B | 向前移一个单词到开头,忽略标点符号 | |
w | 向后移一个单词到开头 | |
W | 向后移一个单词到开头,忽略标点符号 | |
+或Enter | 移到下一行的第一个字符 | |
- |
移到前一行的第一个非空字符 | |
[[ | 光标跳转到代码块开头即{处,要求{独占一行 | |
gD | 光标跳转到局部变量定义处 | |
‘’ | 光标跳转到上次停靠处 | |
ggVG | 全选文本 | |
gg=G | 排版文本 |
屏幕调整
按键 | 作用 |
---|---|
H | 将光标移动到屏幕的顶行 |
nH | 将光标移动到屏幕顶行下的第n行 |
M | 将光标移动到屏幕的中间 |
L | 将光标移动到屏幕的底行 |
nL | 将光标移动到屏幕底行上的第n行 |
CTRL+e | 将屏幕上滚一行 |
CTRL+y | 将屏幕下滚一行 |
CTRL+u | 将屏幕上滚半页 |
CTRL+d | 将屏幕下滚半页 |
CTRL+b | 将屏幕上滚一页 |
CTRL+f | 将屏幕下滚一页 |
CTRL+l | 重绘屏幕 |
z+RETURN | 将光标所在的那一行移至屏幕顶部 |
z-RETURN | 将当前行置为屏幕的顶行 |
nz-RETURN | 将当前行下的第n行置为屏幕的顶行 |
z. | 将当前行置为屏幕的中央 |
nz. | 将当前行上的第n行置为屏幕的中央 |
z- | 将当前行置为屏幕的底行 |
nz- | 将当前行上的第n行置为屏幕的底行 |
插入文本
按键 | 作用 |
---|---|
a | 在光标后插入文本 |
i | 在光标前插入文本 |
A | 在当前行尾插入文本 |
I | 在当前行首插入文本 |
o | 在当前行的下边插入新行 |
O | 在当前行的上边插入新行 |
删除文本
按键 | 作用 |
---|---|
x或dl | 删除光标处的字符 |
nx | 从当前光标处往后删除n个字符 |
X或dh | 删除光标前的字符 |
nX | 从当前光标处往前删除n个字符 |
d | 剪切删除文字 |
D | 从光标定位的行末删除文本 |
dw | 删至下一个字的开头 |
ndw | 从当前光标处往后删除n个字 |
dG | 删除行,直到文件结束 |
dd | 删除整行 |
dj | 删除上一行 |
dk | 删除下一行 |
ndd | 从当前行开始往后删除n行 |
db | 删除光标前面的字 |
ndb | 从当前行开始往前删除n字 |
de | 删除一个单词 |
d$ | 从光标处删除到行尾 |
d1G | 删除光标所在行到第一行的所有数据 |
dgg | 删除当前行到文件首部的所有行(包括当前行) |
jdG | 删除当前行之后所有行(包括当前行) |
: n,md |
n到m行之间的行(可用%或0,$表示全文) |
CTRL+w | 插入模式下,删除前面的字 |
修改文本
每个命令前面的数字表示该命令重复的次数
按键 | 作用
:———–: | :——————–
rCHAR | 用CHAR替换当前字符
R | 从当前字符开始替换直到按下Esc键
s | 删除当前字符并插入
S或cc | 取代光标所在整行
cw | 删除当前单词并插入
C | 删除光标处到行尾字符并插入
cG | 删除光标处到末尾并插入
c0或c^ | 删除光标处到到行首并插入,不包括光标处字符:
1, 10 m 20 | 将第1-10行移动到第20行之后
~
| 交换大小写
复制文本
按键 | 作用 |
---|---|
yy或Y | 将当前行的内容放入临时缓冲区(yank命令) |
nyy | 将n行的内容放入临时缓冲区 |
yw | 把光标当前所在的单词移到缓冲区 |
y$ | 把当前行及其以前的所有文本移到缓冲区 |
p | 将临时缓冲区中的文本放入光标行下 |
P | 将临时缓冲区中的文本放入光标行上 |
ddp | 交换光标所在行和其下一行(dd剪切当前行,p粘贴当前行的下面) |
“(a-z)nyy | 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 |
“(a-z)ndd | 删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 |
“(a-z)p | 将名字为圆括号的可命名缓冲区的内容放入当前行后 |
“(a-z)P | 将名字为圆括号的可命名缓冲区的内容放入当前行前 |
撤消恢复
按键 | 作用 |
---|---|
u | 撤消最后一次修改 |
U | 撤消当前行的所有修改 |
. | 重复最后一次修改 |
CTRL+r | 恢复上一次的撤消 |
“np | 取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9) |
查找与替换
按键 | 作用
:———————-: | :————————————
/text | 在文件中向前查找text,转义字:.[]^%/?~$
?text | 在文件中向后查找text
n | 在同一方向重复查找
N | 在相反方向重复查找
fCHAR | 行内向后查找
FCHAR | 行内向前查找
nfCHAR | 行内向后查找第三个CHAR
ttext | 在当前行向前查找text,并将光标定位在text的第一个字符
Ttext | 在当前行向后查找text,并将光标定位在text的第一个字符
`| 往后查找光标停留位置相同的词组
#| 向前查找光标停留位置相同的词组
g* | 向下部分匹配光标所在处的单词
g# | 向上部分匹配光标所在处的单词
:set ic | 查找时忽略大小写
:set noic | 查找时对大小写敏感
:nohlsearch | 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch | 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan | 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
:s/OLD/NEW | 用NEW替换OLD,替换当前行的第一个匹配,/可换成%
:s/OLD/NEW/g | 用NEW替换OLD,替换当前行的所有匹配
:m,ns/OLD/NEW | 在m到n行,用NEW替换OLD,". ,$" :从当前行到文件尾
:%s/OLD/NEW | 全文用NEW替换OLD,替换所有行的第一个匹配
:%s/OLD/NEW/g | 全文替换指定字符串,将g改为c,就会询问是否替换,p 表示替代结果逐行显示
& | 重复最后的
:s命令
:g/text1/s/text2/text3 | 查找包含text1的行,用text3替换text2
:g/text/command | 在所有包含text的行运行command所表示的命令
:`v/text/command | 在所有不包含text的行运行command所表示的命令
重复
按键 | 作用 |
---|---|
, | 以相反的方向重复前面的f、F、t或T查找命令 |
; | 重复前面的f、F、t或T查找命令 |
n | 重复前面的/或?查找命令 |
N | 以相反方向重复前面的/或?命令 |
保存和退出
按键 | 作用
:———: | :——————
:
w | 保存不退出
:
w! | 强制保存不退出
:
w file | 将修改保存为file不退出:
wq或ZZ或:x | 保存文件并退出vi
:
wq! | 强行保存退出
:
wqa | 保存所有文件
:
q!或ZQ | 不保存文件,退出vi
:
e | 加载最新文件内容
:
e file | 把指定文件载入vi 进行编辑
:
e! | 放弃所有修改,从上次保存文件开始再编辑
vi中的选项
按键 | 作用
:————-: | :—————
:
set all | 打印所有选项:
set nooption | 关闭option选项
:
set nu | 每行前打印行号:
set showmode | 显示是输入模式还是替换模式
:
set noic | 查找时忽略大小写
:
set list | 显示制表符(^I)和行尾符号
:
set ts=8 | 为文本输入设置tab stops:
set window=n | 设置文本窗口显示n行
vi命令
按键 | 作用 |
---|---|
: .= |
打印当前行的行号 |
: = |
打印文件中的行数 |
: l |
使用字母”l”来显示许多的特殊字符,如制表符和换行符 |
在文本中定位段落和放置标记
按键 | 作用 |
---|---|
{ | 在第一列插入{来定义一个段落 |
[[ | 回到段落的开头处 |
]] | 向前移到下一个段落的开头处 |
m(a-z) | 用一个字母来标记当前位置,如用mz表示标记z |
‘(a-z) | 将光标移动到指定的标记,如用’z表示移动到z |
在vi中连接行
按键 | 作用 |
---|---|
J | 将下一行连接到当前行的末尾 |
nJ | 连接后面n行 |
vi中的shell转义命令
按键 | 作用
:————-: | :————————————————
:
!command | 执行shell的command命令,如:!ls
:
!! | 执行前一个shell命令
:
r!command | 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容
:
w!command | 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all:
cd directory | 将当前工作目录更改为directory所表示的目录
:
sh | 将启动一个子shell,使用^d(ctrl+d)返回vi
:
so file | 在shell程序file中读入和执行命令
vi中的宏与缩写
(避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键)
按键 | 作用
:——————-: | :—————————————————————————-
:
map key commands | 定义一个键来运行commands,如:map e ea,可以用e移到一个字的末尾来追加文本
:
map | 在状态行显示所有已定义的宏
:
umap key | 删除该键的宏:
ab string1 string2 | 定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2
:
ab | 显示所有缩写
:
una string | 取消string的缩写
在vi中缩进文本
按键 | 作用
:————————-: | :———————–
CTRL+i或tab | 插入模式,插入移动的宽度,移动宽度是事先定义好的
:
set ai | 打开自动缩进
:
set sw=n | 将移动宽度设置为n个字符
n<<或>n>> | 使往下n行都向左(右)移动一个设定宽度
== | 自动缩进当前行
: cd C:\Users\Hello\Desktop | 切换目录
vim配置
vimrc
windows下,打开gvim,使用:vi $vim/_vimrc
打开配置文件
linux下,使用vi ~/.vimrc
打开配置文件
1 | set nocompatible "不要使用vi的键盘模式,而是vim自己的 |
自动打开上一个文本
1 | "Go to last file(s) if invoked without arguments. |
文件管理器设置
1 | "MiniBufExplorer |
gvim不生成备份文件
打开vimrc_example.vim文件,找到下面的代码:
1 | if has("vms") |
注释掉else后面的内容